CreateThread(...) Parameter übergeben??
-
hallo,
ich habe eine (hoffe ich) kurze frage
ich arbeite mit CreateThread(...) und es kappt auch alles perfekt!aber ich muss nun der Funktion die ich als Thread aufrufe eine ID
einfach als Integer übergeben!und ich kriegendas einfach nicht hin wie ich mit CreateThread(...)
was übergeben kann!!habt ihr da vllt. eine nette beschreibung oder ein kleines beispiel?
danke euch!
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
zu musst einen zeiger übergeben (void* kann ja alles sein) und in deiner funktion einfach wieder in seinen ursprungstyp zurückcasten.
bsp: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/creating_threads.asp
-
Du solltest besser nicht CreateThread verwenden!
Übrigens, wie beendest du denn deinen CreateThread(..) eigentlich?
-
Annhius schrieb:
Du solltest besser nicht CreateThread verwenden!
warum sollte er nicht?
-
mal ein kleines beispiel: übergeben zweier werte an einen thread, der multipliziert die und gibt das ergebnis zurück...
#include <stdio.h> #include <windows.h> DWORD __stdcall threadfunc (void *arg) { return HIWORD(arg) * LOWORD(arg); } int main() { WORD mult1 = 10; WORD mult2 = 20; DWORD result; DWORD tid; HANDLE hthread; hthread = CreateThread (NULL, 0, threadfunc, (void*)MAKELONG(mult1, mult2), 0, &tid); if (hthread) { WaitForSingleObject (hthread, INFINITE); GetExitCodeThread (hthread, &result); printf ("%d*%d=%d\n", mult1, mult2, result); CloseHandle (hthread); } }
-
wow danke ja das klappt perfekt
nurnoch eine frage - wenn die funktion die als thread gestartet werden soll
eine methode einer klasse ist, was muss ich tun damit das funktioniert?void CEx_MSDlg::test() { MessageBox("lol"); } void CEx_MSDlg::OnOK() { CreateThread(NULL, 0, &test, 0, 0, NULL); ... }
denn dann gibts folgende fehlermeldung:
E:\c#\A Projekte\Ex_MS\Ex_MSDlg.cpp(413) : error C2276: '&' : illegal operation on bound member function expression
ohne "&" zeiger kommt:
E:\c#\A Projekte\Ex_MS\Ex_MSDlg.cpp(412) : error C2664: 'CreateThread' : cannot convert parameter 3 from 'void (void)' to 'unsigned long (__stdcall *)(void *)' None of the functions with this name in scope match the target type Error executing cl.exe.
dank euch schonmal!
-
wurde heute schon mal behandelt
http://www.c-plusplus.net/forum/viewtopic-var-t-is-154669.htmlich würde dir zu boost raten
http://www.boost.org/doc/html/threads.html
-
Annhius schrieb:
Du solltest besser nicht CreateThread verwenden!
Übrigens, wie beendest du denn deinen CreateThread(..) eigentlich?
Sry es war TerminateThread gemeint. *hicks*