Posix Thread in einer Klasse
-
Guten Abend
Ich denke der Titel beschreibt mein Problem recht exakt. Ich wäre für ein minimalistisches Beispiel dankbar.Vielen Dank
-
http://www.linuxselfhelp.com/HOWTO/C++Programming-HOWTO-18.html oder Boost nehmen.
class Thread { public: Thread(); virtual ~Thread(); // Startet die Methode run() in einem eigenen Thread int start(); // Threadroutine, wird von start()/entry() in einem // eigenen Thread gestartet virtual void run() = 0; // true wenn run gerade in einem eigenen thread ausgefuerhrt weird bool running(); // Wartet auf die Beendigung des Threads int join(); // Freigeben der Ressourcen, siehe pthread_detach int detach(); private: // Eintrittspunkt fuer das Starten des Threads // nimmt this als Argument, und fuert dann // run aus, wird von start() benutzt static void* entry(void* me); private: Thread(const Thread&); pthread_t threadId; bool state; }; Thread::Thread() { // create something state = false; threadId = 0; } Thread::~Thread() { // destroy something if ((threadId != 0) && (state)) { pthread_cancel(threadId); } } bool Thread::running() { return state; } void* Thread::entry(void* me) { //Thread* pthis = dynamic_cast<Thread*>(me); //Thread* pthis = static_cast<Thread*>(me); Thread* pthis = (Thread*)(me); // soll immer und ueberall gecancelt werden koennen pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,0); pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,0); pthis->state = true; pthis->run(); pthis->state = false; return 0; } int Thread::start() { return pthread_create(&threadId, 0, Thread::entry, (void*)this); } int Thread::join() { if ((threadId != 0) && (state)) { return pthread_join(threadId, 0); } return -1; } int Thread::detach() { if (threadId != 0) { return pthread_detach(threadId); } return -1; }