Threads crashen das Programm



  • Hi,

    ich habe in mein Programm 2 Threads implementiert welche aber mein Programm nach zufälliger Zeit zum crashen bringen.

    Thread1:

    DWORD WINAPI NThread(LPVOID)
    {
    
        while (1)
        {
            //nxt title
            if (GetAsyncKeyState(VK_F2))
            {
                SendMessage(hwndWinamp,WM_COMMAND,40048,0);
                while (GetAsyncKeyState(VK_F2))
                {
                    SleepEx(100, true);
                }
                Title();
                timedraw(title);
    
            }
            //RAISE VOLUME//
            if (GetAsyncKeyState(VK_F5))
                while (GetAsyncKeyState(VK_F5))
                {
                    SendMessage(hwndWinamp,WM_COMMAND,40058,0);
                     SleepEx(100, true);
    
                }
        }
    }
    

    Der 2te Thread ist gleich aufgebaut aber mit anderen SendMessages.

    Es funktioniert auch alles wunderbar so wie ich es will nur eben crasht das programm ab und an. An was kann das liegen? oder besser gesagt wie kann ich sowas richtig debuggen?

    Ich denke ich komm eben nicht um 2 threads herum da die funktion timedraw(); eine 5 Sekundenlange schleife enthält und ich während dieser keine anderen Aktionen durchführen kann.

    Die Threads habe ich so in das Programm implementiert:

    CreateThread(0, 0, (LPTHREAD_START_ROUTINE) PThread, 0, 0, 0);
        CreateThread(0, 0, (LPTHREAD_START_ROUTINE) NThread, 0, 0, 0);
    


  • ich glaube der fehler liegt daran,dass du eine variable hast,die beide threads bearbeiten und dann crasht es nach geraumer zeit......



  • klg71 schrieb:

    ich glaube der fehler liegt daran,dass du eine variable hast,die beide threads bearbeiten und dann crasht es nach geraumer zeit......

    klingt einleuchtend

    also alle funktionen für jeden thread einzeln deklarieren?

    werds mal testen.

    edit: eben versucht brachte leider nichts. Achja was ich vergessen habe zu erwähnen, wenn das Programm crasht dann immer direkt nach einer Tasteneingabe.



  • ich meinte variablen wahrscheinlich versuchen 2 threads gleichzeitig in eine varible zu schreiben oder der speicherbereich ändert sich nachdem der eine thread gearbeitet hat und will danach wieder darauf zugreifen kommt der fehler.....
    also musst du deine anwendung threadsafe machen(dafür sorgen dass sich die threads nicht in die quere kommen) oder über mutexe,sichere bereiche und was es alles noch so gibt....


  • Mod

    Debugger nehmen und testen... wie wäre esdamit?
    Zur Not Remote Debugger benutzen und an den gecrashten Prozess attachen.

    BTW: Wäre RegisterHotKey nicht ein einfacherer Weg als dieser Unfug?



  • Martin Richter schrieb:

    Debugger nehmen und testen... wie wäre esdamit?
    Zur Not Remote Debugger benutzen und an den gecrashten Prozess attachen.

    BTW: Wäre RegisterHotKey nicht ein einfacherer Weg als dieser Unfug?

    Danke, hab nur bis jetzt leider relativ wenig erfahrung mit debuggern 😕

    Wieso sollte GetAsyncKeyState Unfung sein? Diese Funktion tut wunderbar ihren Dienst bis jetzt oder was spricht dagegen?



  • solche while schleifen sind immer das schlechteste was man machen kann auch wenn sie in einem externem thread liegen.... lieber über messages und so lösen dass verbraucht nicht so viel cpu....



  • klg71 schrieb:

    solche while schleifen sind immer das schlechteste was man machen kann auch wenn sie in einem externem thread liegen.... lieber über messages und so lösen dass verbraucht nicht so viel cpu....

    Dass der CPU verbrauch relativ hoch ist hab ich gemekrt ja, wie meinst du das über messages lösen? Kannste mir bitte vielleicht grade 2-3 Zeilen Code geben ,dass ich mir darunter was vorstellen kann?


Anmelden zum Antworten