Threads



  • Mir ist da noch was nich ganz klar.

    Wenn ich einen Thread mit Resume() aufrufe, und im Execute() das auszuführende steht, geht das nur einmal.
    Wenn ich das nächste mal Resume() aufrufe, geht nix mehr.
    Wenn ich eine Funktion im Thread aufrufe läuft der Thread nicht mehr Paralel zum Programm, sonder schließt sich der Ablauffolge im Code an.

    Also wie rufe ich einen Thread immer wieder auf?



  • Ich glaube gar nicht. Seh auch keinen Sinn darin.



  • Unter TThread ist eine Super - Gute - Ausführliche Erklärung in der Hilfe.

    Resume steht in Zusammenhang mit Suspend.

    Mit Suspend können Sie die Ausführung eines Thread temporär unterbrechen. Mit Resume kann die Ausführung anschließend wieder aufgenommen werden. Suspend-Aufrufe können verschachtelt sein. Entsprechend oft muß dann aber auch Resume aufgerufen werden, bevor der Thread fortgeführt wird.



  • Ich denke du hast vergessen eine wiederholschlaufe (while (!Terminated) ) um den Code zu machen den du in Execute geschrieben hast?

    Ich gehe mal davon aus, du willst, dass das was in Execute steht abläuft und du dann zeitweilig die Verarbeitung neu starten kannst mit Resume? In einem solchen Fall würde ich folgende Konstruktion empfehlen:

    do
    {
        //-- Dein Code hier
    
        Suspend();
    }
    while(!Terminate);
    

    Nun läuft das Programm durch, geht auf Suspend, was die Threadausführung unterbricht. Wenn du jetzt Resume aufrufst und nicht die Terminate-Funktion aufgerufen hast, springt der Thread wieder aus Suspend raus und springt wieder an den Anfang der do-while...



  • Wenn Resume und Suspend Wrapper für ResumeThread und SuspendThread sind solltest du diese unbedingt vermeiden.



  • Wird man wohl nicht können, wenn man die Klasse TThread nutzt, da sie Bestandteile (Methoden) dieser Klasse sind

    Entweder man benutzt die Klasse oder die API. Mischen ist "ungesund"



  • ................. schrieb:

    Wenn Resume und Suspend Wrapper für ResumeThread und SuspendThread sind solltest du diese unbedingt vermeiden.

    ???



  • Why you should never call Suspend/TerminateThread (Part I-III)
    http://blog.kalmbachnet.de/?postid=6
    http://blog.kalmbachnet.de/?postid=16
    http://blog.kalmbachnet.de/?postid=17

    Ausserdem: This function is primarily designed for use by debuggers.



  • Äh ja... man kann ja nicht alles vor "Denn sie wissen nicht was sie tun"-Programmierern sicher machen oder?

    Selbstverständlich bedarf jedes Mittel dem entsprechend vorsichtigen Umgang... *kopfschüttel*

    AUsserdem ist Jochens Beitrag nicht komplett zitiert... Ich empfehle jedem mal den MSDN-Beitrag selbst zu lesen...


Anmelden zum Antworten