Auslastung



  • Hi Leute

    Ich habe ein Programm geschrieben, welches dauerhafte Protzeduren durchlaufen muss, die zwischen einigen Sekunden, bis hin zu mehreren Tagen (Langzeittests) dauern können. Leider ist in diesem Zeitraum mein Programm auf 100% Auslastung und kann von mir nicht gesteuert oder der aktuelle Vorgang abgebrochen werden.
    Deshalb nun (wie sich jeder denken kann) folgende Frage:

    Wie kann ich mein Programm abändern, dass ich mindestens eine Art "Notaus" für meine Anwendung habe?

    Es muss nicht nötig sein andere programmierte Funktionen multitaskingmäßig auszuführen, da meine Hardware, die ich Teste kein Multitasking kann.


  • Mod

    Ist es ein Konsolen Programm?
    Bau Dir einen Ctrl+C Handler ein.

    Windows Programm?
    Führe ab und zu ein PeekMessage/PumpMessage durch, dann bekommst Du auch mit wenn einer einen Abbrechen Schalter klickt.

    Sauberste Lösung:
    Ansonsten konzipiere Dein Programm als Service. Einfach das Service-Framework von PJ Naughter verwenden www.naughter.com


  • Administrator

    Irgendwo, wo dein Programm immer wieder hinkommt, es ist ja wohl eine Schlaufe drin nehm ich an, kannst du GetAsyncKeyState aufrufen. z.b. so

    if(GetAsyncKeyState(VK_ESCAPE))
    {
        // Abbrechen ...
    }
    

    Nicht die sauberste Lösung denke ich, aber es ist eine ^^

    Grüssli



  • Hast Du schon mal was von Threads gehört?
    Du kannst einfach eine Variable einbauen, die während Deinen "Aufgaben" immer mal wieder abgefragt wird. Ist diese z.B. true, so beendest Du Dich...





  • Das Problem ist ja so, dass ich das Programm garnicht ansprechen kann. Ich kann keinen Buton abfragen oder anklicken und wenn ich mal ein anderes Fenster geöffnet habe (z.B. einen Browser oder ein anderes Programm) kann ich meine Testsoftware nichmehr in den Vordergrund bringen. Wenn ich alle anderen Programme minimiere oder schließe seh ich das Fenster aber ohne Inhalt. Somit ist das Problem, dass ich garnichts anklicken kann. Ist das irgendwie zu beheben?



  • Du hast bereits eine passende Antwort bekommen. (Threads)



  • Das habe ich versucht. Da ist aber das Problem, dass ich dort meine Datenfelder nicht einlesen darf (UpdateData(TRUE) funktioniert dort nicht da static). Leider kann ich die Variablen auch anicht einfach übergeben (zumindest hab ich das nicht geschaft). Wenn ich wüsste wie das geht bekomm ich das mit den Threads hin. Ich habe einen Textstring und eine Integer die ich übergeben muss, schaff es aber nicht.


Log in to reply