_beginthread mit classen
-
Hallo user!!
Habe folgendes Problem.
Ich habe eine Klasse die in der header.h gespeichert ist.
#ifndef HEAD #define HEAD class test { test(); ~test(); void thread_shutdown( void* ); } #endif
Ich habe eine main.cpp
Hier liegt aber das Problem.
Eigentlich müsste ich doch in _beginthread( pointer->thread_shutdown)
schreiben. FUNZT aber ned
FEHLERMELDUNG:
20 F:\source_code\icp_0_01\main.cpp argument of type `void (carpc::)(void*)' does not match `void ()(void)'#include "header.h" int main() { test *pointer = new test(); _beginthread( test->thread_shutdown , 0 , NULL ); alternativ //_beginthread( thread_shutdown , 0 , NULL ); while(true) cout << "main" <<endl; return 0; }
Ich habe auch eine thread.cpp
#include "header.h" test::test(){} test::~test(){} void test::thread_shutdown( void *pParams ) { while(true) cout << "shutdown" <<endl; return; }
oder ich schreib keine Klasse sondern so in der Form
#includes DEKLARATION THREAD int main() { _beginthread( thread_shutdown , 0 , NULL ); } DEFINITION THREAD
so funktioniert es aber ich will es in einer Klasse schreiben !!
Sollte doch gehen oder ??Doch wie übergebe ich den Thread funktionsnamen der _beginthread() richtig ???
Hat jemand eine AHNUNG ?? Oder TIPP
-
Falsches Forum; _beginthread kannst du nur indirekt mit Klassen benutzen, indem du eine normale Funktion übergibst, welche die Memberfunktion für eine als Argument übergebene Instanz aufruft.
-
Vielen vielen Dank für deine Antwort /rant/
Welches Forum wenn nicht .Net in der MSDN stand .NET ? : )Vorerst ich habs gelöst mit diesem von mir alten geposteten Code schema
#includes DEKLARATION THREAD int main() { _beginthread( thread_shutdown , 0 , NULL ); } DEFINITION THREAD
Meine Funktionen in den Threads ruf ich dann wie folgt auf
test::methoden...
Hab also meine Methoden static in der Klasse gemacht.
Weiß jemand ein gutes Buch oder online Tutorial um mit threads und Events in C++ fit zu werden ?? Ja google gibt mir viel aber vielleicht kennt ja jemand einen supergoogle link : )
Nun zu deiner Antwort.
Memberfunktion = Methode
Instanz = mit new erzeugtes ObjektAber was meinst du mit,
welche die Memberfunktion für eine als Argument übergebene Instanz aufruft.
Könntest du ein Codebeispiel posten??
Es reicht ein kurzes : )Vielen Dank
-
Es ist trotzdem kein .NET.
_beginthread(ex) ist von der c-runtime.
Simon
-
ok ok !! Ich glaubs schon !! : )
-
Hier ein kleines Bsp. wies angedacht wurde:
#include <process.h> #include <windows.h> class Task { public: Task() { _thread = reinterpret_cast<HANDLE>(_beginthreadex(0, 0, &Task::threadProc, this, 0, 0)); } ~Task() { WaitForSingleObject(_thread, INFINITE); CloseHandle(_thread); } private: static unsigned int __stdcall threadProc(void* arg) { Task* instance = reinterpret_cast<Task*>(arg); instance->threadProc(); return 0; } void threadProc() { // ... } private: HANDLE _thread; };