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



    1. schrieb:

    0 - 2

    ein fussballergebnis ?



  • Meep Meep schrieb:

    1. 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_meldung

    kommt immer die errormeldung wegen des HANDLES

    Meep Meep



  • *lol*


Anmelden zum Antworten