Hi, wenn ich in der WinApi einen Thread abspalten möchte, dann würde ich dies mit CreatThread machen. Arbeite mit diesem Beispiel: http://www.cs.rpi.edu/academics/courses/netprog/WindowsThreads.html Ich habe dazu folgendes in meiner Api mit eingebaut: DWORD WINAPI ThreadRoutine1(LPVOID lpArg) { while(1) { main_prog (); //Sleep(50); } return NULL; } Beginn des Api Mains: int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hWnd; MSG msg; WNDCLASSEX wc; HANDLE hHandle1; DWORD ThreadId1=0; .... dann mache ich irgentwann das: hHandle1 = CreateThread(NULL,0,ThreadRoutine1,0,0,&ThreadId1); Kann es sein das Create Thread nicht zurück kommt wenn ich im Thread eine While Schleife habe, oder was mache ich falsch? Gruß, Thorsten
Mich wundert, das das kompiliert. Meiner Meinung nach müssste es heißen: hHandle1 = CreateThread(NULL,0, &ThreadRoutine1,0,0,&ThreadId1); man beachte den Adressoperator!
main_prog testet nur bis ab...kann man so sagen...wäre doch aber fast egal was main_prog macht oder? ausser es beeinfluss etwas grundlegendes, da es ja eh nie zurückkommt..
wie soll man das sagen, wenn du nur Fragmente zeigst? Könnte, sollte, müsste...
...sobald man es so macht, läuft es: DWORD WINAPI ThreadRoutine1(LPVOID lpArg) { while(1) { main_prog (); Sleep(1); //fprintf(stderr,"My argument is \n"); } return NULL; } nur etwas langsam... eigentlich sollte das aber nicht weiter stören... ich versuche gerad diese Geschichte etws zu entwirren. Momentan wird alles sequenziell aufgerufen, nun will ich erstmal 2 Thread starten, die die Softimer und das eigentliche AVR main bedienen...
Klaus Wachtler schrieb: > @Vlad: > nee, das & vor Funktionsnamen kann weggelassen werden (seit ANSI-C). Ok, das war mir nicht bewusst, bei mir steht da immer einer, finde ich semantisch auch sinnvoller. Dann liegt der Fehler definitiv nicht in dem hier geposteten Code. @TO: hast du mal einen Breakpoint auf das CreateThread gesetzt und dich vergewissert, dass er wirklich nicht aus er Funktion zurückkehrt? Edit: hab grad mal mein Quellcode-Verzeicnis durchgegrept, ist doch bunt gemischt mit und ohne '&' ;)
BTW: entsprechend kann man beim Aufruf einer Funktion über einen Zeiger das * verwenden oder weglassen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.