Threads : Probleme mit der Parameterübegabe
-
hallo leute,
ich habe gerade ein wenig mit threads rumgespielt und wollte 2 davon in einer schleife erstellen. zuerst mal der code:
#include <stdio.h> #include <stdlib.h> #include <windows.h> #define SLEEP 1000 DWORD WINAPI switch_func(LPVOID i); void status_thread_1(void); void status_thread_2(void); int main() { HANDLE hThread[2]; DWORD ThreadID[2]; int i; for(i=0; i<2; ++i) if((hThread[i]=CreateThread(0, 0, switch_func, &i, 0, &ThreadID[i]))==0) return 1; WaitForMultipleObjects(2, hThread, TRUE, INFINITE); for(i=0; i<2; ++i) CloseHandle(hThread[i]); system("pause"); return 0; }; DWORD WINAPI switch_func(LPVOID i) { int* a=(int*) i;//der cast is unschön aber der compiler hats anders nicht geschluckt. printf("%d\n", *a);//wird zur kontrolle ausgegeben if(*a==0) status_thread_1(); else status_thread_2(); return 1; } void status_thread_1() { printf("Thread 1 laeuft...\n"); Sleep(SLEEP); printf("Thread 1 beendet!\n"); } void status_thread_2() { printf("Thread 2 laeuft...\n"); Sleep(SLEEP); printf("Thread 2 beendet!\n"); }ich übergebe immer die gleiche funktion, die dann, je nach parameter (parameter ist die adresse der zählervariablen), eine andere funktion aufruft, die eigentliche threadfunktion. ist sowas überhapt sinnvoll oder gibts noch ne andere möglichkeit, threads mit unterschiedlichen aufgaben in einer schleife zu erstellen?
soweit geht auch alles aber am ende der ersten schleife ist der wert der variablen i immer 2 und so wird immer zu status_thread_2 gesprungen. warum wird die funktion nicht schon beim erstellen des threads aufgerufen sondern erst dannach?
dann hab ichs mit einer globalen variable versucht, die in der ersten schleife erhöht wird. Es wird wieder wird nur die 2te funktion aufgerufen. dann hab ich die variable mal in switch_func inkrementiert, jetzt wird 2 mal die erste funktion aufgerufen
Was mach ich da falsch?
-
tausch mal die entsprechenden zeilen in deinem code gegen diese...
... if((hThread[i]=CreateThread(0, 0, switch_func, (void*)i, 0, &ThreadID[i]))==0) ... ... int a=(int) i;//der cast is unschön aber der compiler hats anders nicht geschluckt. printf("%d\n", a);//wird zur kontrolle ausgegeben if(a==0) ...
-
@ pale dog: ok vielen dank, klappt perfekt!

-
Dieser Thread wurde von Moderator/in Tim aus dem Forum ANSI 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.