Entwickler-Ecke
Windows API - WinXp + D6 WaitForSingleObject hängt ganze exe auf
OL-Langer - Mo 21.10.02 21:02
Titel: WinXp + D6 WaitForSingleObject hängt ganze exe auf
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| var hEve : THandle; begin hEve := CreateEvent(nil,False,False,'TEST'); ... ... ... ... WaitForSingleObject(hEve,INFINTE); |
ab hier geht nix mehr bis das ereigniss ausgelöst wurde. selbst wenn ich einen extra thread starte geht nix mehr, werde noch wahnsinnig, hoffe ihr habt nee Lösung für mich
AndyB - Mo 21.10.02 21:25
Was erwartest du denn von einer Funktion die WarteAufEinzelnesObjekt(hEv, unendlich) heißt?
probiere es mal so:
Quelltext
1: 2:
| while WaitForSingelObject(hEve, 100) = WAIT_TIMEOUT do Application.ProcessMessages; |
Damit reagiert deine Anwendung noch, während jedoch gewartet wird.
OL-Langer - Mo 21.10.02 22:08
:D
Okay danke dir ,aber wieso hängt meine ganze anwendung wenn ich in einem extra thread warte ?? Nur um was zu lernen
AndyB - Mo 21.10.02 22:56
Das kann ich dir nicht beantworten, da bei mir dieses Phämomen nicht auftritt.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| type TMyThread = class(TThread) protected procedure Execute; override; end;
function MyThread(Param: Pointer): Integer; var hEve : THandle; begin hEve := CreateEvent(nil,False,False,'TEST'); WaitForSingleObject(hEve, INFINITE); ShowMessage('Hallo'); Result := 0; end;
procedure TMyThread.Execute; begin MyThread(0); end;
procedure TForm1.Button1Click(Sender: TObject); var ThreadId: THandle; begin // BeginThread(nil, 0, MyThread, nil, 0, ThreadId); with TMyThread.Create(False) do FreeOnTerminate := True; end; |
OL-Langer - Di 22.10.02 20:37
Okay du nimmst nee thread unit (also Klasse von TTHREAD) ... vielleicht sollte ich das auch so machen , habe nee procedure gemacht und die mit CreateThread (Procedure als pointer übergeben) erzeugt und in der gewartet , werde es mal testen ,danke für die Gute Hilfe
Gruss OLI
AndyB - Di 22.10.02 22:14
CreateThread solltest du nicht verwenden. Dazu hat Borland die Funktion BeginThread eingeführt, die die Speicherverwaltung threadsicher macht.
In meinem Code habe ich beides verwendet BeginThread und TThread. Du musst nur das '//' vor dem BeginThread entfernen und die TThread-Abhängigen Sachen auskommentieren.
OL-Langer - Mi 23.10.02 22:30
Ja danke dir :)) habe es verstanden
Gruss OLI
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!