POSIX-Threads in C++

Post Reply
Message
Author
User avatar
Lateralus
prolinux-forum-admin
Posts: 1238
Joined: 05. May 2004 7:35

POSIX-Threads in C++

#1 Post 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?

User avatar
hjb
Pro-Linux
Posts: 3264
Joined: 15. Aug 1999 16:59
Location: Bruchsal
Contact:

#2 Post 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
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?

User avatar
Lateralus
prolinux-forum-admin
Posts: 1238
Joined: 05. May 2004 7:35

#3 Post by Lateralus »

Vielen Dank. (Langsam bekomme ich mit, an wen ich mich mit meinen C-Fragen wenden muss. ;-) )

Post Reply