Page 1 of 1

POSIX-Threads in C++

Posted: 27. Sep 2005 9:52
by Lateralus
Hi

Ich würde gerne pthreads in C++ verwenden, habe aber Probleme mit der Definition der Funktionen, welche von pthread_create() aufgerufen werden sollen:

Beispiel:
pthread.cpp:

Code: Select all

#include <iostream.h>
#include <unistd.h>
#include <pthread.h>

class Test&#123;
	private&#58;
	void *do_something_else&#40;void *arg&#41;;
	
	public&#58;
	
	void do_something&#40;&#41;;
&#125;;

void Test&#58;&#58;do_something&#40;&#41;&#123;
	pthread_t thread1;
	
	pthread_create&#40;&thread1, NULL, do_something_else, NULL&#41;;
	sleep&#40;20&#41;;
	pthread_kill&#40;thread1, SIGTERM&#41;;
&#125;

void *Test&#58;&#58;do_something_else&#40;void *arg&#41;&#123;
	while&#40;1&#41;&#123;
		cout << "thread sleeps...\n";
		sleep&#40;3&#41;;
	&#125;
&#125;
Kompilieren:

Code: Select all

g++ -Wno-deprecated pthread.cpp 
pthread.cpp&#58; In member function `void Test&#58;&#58;do_something&#40;&#41;'&#58;
pthread.cpp&#58;17&#58; error&#58; argument of type `void*&#40;Test&#58;&#58;&#41;&#40;void*&#41;' does not match `void*&#40;*&#41;&#40;void*&#41;'
Wie genau müsste die Definition der Funktion statt

Code: Select all

void *Test&#58;&#58;do_something_else&#40;void *arg&#41;&#123;
...
&#125;
aussehen?

Posted: 27. Sep 2005 10:55
by hjb
Hi!

Da pthreads ein C-API ist (keine klassen), darf man natürlich keine Methoden eines Objektes aufrufen. Es sei denn, es sind statische Methoden. Dann kannst du im Wesentlichen aber auch gleich normale Funktionen nehmen.

Eine objektorientierte Thread-Klasse findet man z.B. in wxWidgets.

Gruß,
hjb

Posted: 28. Sep 2005 3:55
by Lateralus
Vielen Dank. (Langsam bekomme ich mit, an wen ich mich mit meinen C-Fragen wenden muss. ;-) )