WaitForMultipleObjects
-
hallo leute
kleines problem. bekomme immer unguultigen handle als fehlermeldung:
wallte WaitForMultipleObjects mit events in verbindung mit nem thread testen.
folgender aufbau:
static HANDLE events[3]; /* global, musste ich static nehmen, weil der compiler sonst meckerte, das er die variable doppelt definiert haette. k.a. warum */ /*dann im ctor meines forms(bcb)/* events[0] = CreateEvent(0, false, false, "EVENT1"); if(events[0] == 0) Memo1->Lines->Add("ERROR"); events[1] = CreateEvent(0, false, false, "EVENT2"); if(events[1] == 0) Memo1->Lines->Add("ERROR"); events[2] = CreateEvent(0, false, false, "EVENT3"); if(events[2] == 0) Memo1->Lines->Add("ERROR"); /* drei Button-events zum feuern meiner erzeugten events */ void __fastcall TForm1::Button3Click(TObject *Sender) { SetEvent(&events[0]); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button4Click(TObject *Sender) { SetEvent(&events[1]); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button5Click(TObject *Sender) { SetEvent(&events[2]); } /* nun der threadteil */ void __fastcall EventThread::Execute() { Form1->Memo1->Lines->Add("Thread is running..."); bool stop = false; while(!stop) { result = WaitForMultipleObjects(1,&events[3],false,INFINITE); (1) Form1->Memo1->Lines->Add(result); if(result == 0xFFFFFFFF) { DWORD error = GetLastError(); Form1->Memo1->Lines->Add(error); stop = true; } if(result == 0) Form1->Memo1->Lines->Add("Event1 was Fired"); else if(result == 1) Form1->Memo1->Lines->Add("Event2 was Fired"); ResetEvent(events[result]); } Form1->Memo1->Lines->Add("Thread beendet"); }in zeile(1) meckert er dann immer das das ein ungueltiger handle sei.
sieht da jemand den fehler ?Meep Meep
-
3 ist kein gültiger Index für events.
-
Mal abgesehn davon, dass es da gar keinen Indexwert braucht...?
-
re
ja,
zu erst hatte ich
result = WaitForMultipleObjects(3,events,false,INFINITE); (1) result = WaitForMultipleObjects(1,&events[3],false,INFINITE); (2)zuerst hatte ich (1)
zeile (2) kam hinzu, weil ich dann 4 events hatte. hab zum testen noch FindFirstChangeNotification dazugenommen gehabt.mit zeile(1) kam aber auch immer der ungueltige HANDLE
Meep Meep
-
0 - 2
-
- schrieb:
0 - 2
ein fussballergebnis ?
-
Meep Meep schrieb:
- schrieb:
0 - 2
ein fussballergebnis ?
Nein, der erlaubte Index für events. Du hast nur 3, events[3] wäre der vierte.
-
jetzt hab ich auch nur noch
result = WaitForMultipleObjects(3,events,false,INFINITE);im code stehen. meine abfrage jetzt laeuft ueber ne switch-case anweisung.
case 1: bla bla
case 2: bla bla
case 3: bla bla
default: error_meldungkommt immer die errormeldung wegen des HANDLES
Meep Meep
-
*lol*