_beginthreadex() falsche Parameter?
-
Hallo,beschäfftige mich seit heute mittag mit der _beginthreadex() Funktion.
Meine 1 Thread Funktion sieht so aus:unsigned __stdcall thread_test(struct info *i)Und so starte ich den Thread dann:
_beginthreadex(NULL,0,thread_test,&x,0,NULL);Das klappt auch alles soweit. Nur bei meiner 2 Thread Funktion:
unsigned __stdcall thread_open()Erhalte ich mehrere Warnungen das der Aufruf mit _beginthreadex() verkehrt sei:
_beginthreadex (NULL,0,thread_open,NULL,0,NULL);Diese Warnungen erhalte ich dann immer:
warning C4113: 'unsigned int (__stdcall *)()' differs in parameter lists from 'unsigned int (__stdcall *)(void *)'
Cwarning C4276: 'thread_open' : no prototype provided; assumed no parametersJetzt ist meine Frage an euch was mache ich verkehrt? Kurze erklärung bitte was falsch ist,will es ja verstehen.

-
Die Funktion die auf dem Thread (mit _beginthreadex) aufgerufen werden soll MUSS exakt die folgende Signatur haben: *unsigned int __stdcall my_thread_function(void )
Wenn Du keine Parameter an die Funktion übergeben möchtest, übergib einfach 0.
Falls Du ein Argument übergeben möchtest, übergib die Adresse.Simon
-
Danke dir.
War schon fast am verzweifeln.

-
passt zwar nich zum thema aber was für einen return wert soll den eigentlich eine thread funktion zurück geben die mti begintheadex gestartet wurde?
-
unreg schrieb:
passt zwar nich zum thema aber was für einen return wert soll den eigentlich eine thread funktion zurück geben die mti begintheadex gestartet wurde?
Ein beliebiges DWORD, das du mit GetThreadExitCode() abfragen kannst.
-
habe zu der funktion jetzt nichts in der msdn gefunden und mein compiler sagt mir auch:
warning C4013: 'GetThreadExitCode' undefined; assuming extern returning int
error LNK2001: unresolved external symbol _GetThreadExitCode
-
GetExitCodeThread mein ich.

-
ich glaube du hast mich verkehrt was für ein return wert sollte die tread funktion zurückgeben?
weil ich erhalte immer en fehlerwarning C4716: 'thread_func' : must return a value
-
Irgendeinen Wert!
zb
DWORD __stdcall threadfunc(LPVOID data) { DWORD done = DoSomething(); return done; }HANDLE thread = _beginthreadex(NULL, 0, threadfunc, NULL, 0, NULL); WaitForSingleObject(thread, INFINITE); DWORD exitcode; GetExitCodeThread(thread, &exitcode); if(exitcode) printf("Success!"); else printf("Failure!"); CloseHandle(thread);