Frage zu Threads



  • Hey,

    ich habe zurzeit ein Problem mit einem Thread in meiner Anwendung. In meiner Doc-Klasse mepfange ich verschiedene Messages, die mir mein Thread schickt, wenn er neue Daten hat.
    Darin wiederum teile ich meiner View-Klasse per Sendmessage mit, dass es neue Daten gibt und dann werden verschiedene Aktionen durchgeführt.

    Meine Frage ist: wie kann ich am besten meinen Thread per Klick auf einen Stop-Button beenden ? 😕

    Per TerminateThread soll das ja nicht geschehen !
    Wäre super, wenn mir da jemand ein paar Tipps dazu geben kann...



  • Du übergibst doch vermutlich einen Zeiger auf irgendeine Struktur an deinen Thread. Pack da doch einfach ein bool mit rein, dass du im Eventhandler des Stop-Buttons setzt und im Thread abfragst.



  • Das ging ja schnell. 👍

    Ok, werde das so machen.

    Und wie kann ich den Thread selber dann beenden, wenn die bool Variable zutrifft ?



  • Der Thread wird einfach durch ein return beendet, wie eine normale Funktion (denn eigentlich ist er das ja).

    EDIT: Je nachdem, wie du ihn gestartet hast, musst du noch an ein CloseHandle denken. Das hat aber nix damit zu tun, den Thread zu beenden.



  • Ok, super, ja das CloseHandle sollte ich nicht vergessen.
    Ich nehme für Threads immer die API-Aufrufe, da weiß ich wenigstens genau, was ich mache oder angebe.

    Ich danke dir erstmal, wenn noch was unklar ist, melde ich mich nochmal. 👍



  • R3dNeXX schrieb:

    Ich nehme für Threads immer die API-Aufrufe

    Meinst du damit jetzt CreateThread? Falls ja: davon wird meist abgeraten, weil du Probleme kriegen kannst, wenn du CRT-Calls in den Thread packst (memleaks), wenn du die CRT statisch linkst usw. (siehe http://blog.m-ri.de/index.php/2007/11/28/createthread-und-die-crt/). Nimm AfxBeginThread oder _beginthreadex. Von _beginthread würde ich auch abraten, zumindest wenn man auf den Thread warten und ihn nicht ins Nirwana schicken will (warum steht in der Doku).



  • So richtig verstehe ich das aber noch nicht.
    Und was genau mit CRT-Calls gemeint ist, auch nicht, bzw. welche das z.B. sind.

    Und wo kann man erkennen, ob die CRT verwendet wird, in den Project-Settings ? Falls man das überhaupt kann...

    Ich glaub, du musst mich da mal noch etwas aufklären.


  • Mod

    Das erste was ein C++ Entwickler lernen solte st die Unterscheidung der Libraries und der APIs die er benutzt 🕶

    srtcpy, strtok, fopen. Die gesamte MFC verwendet die CRT und Du verwendest offensichtlich die MFC...
    Lies meinen Artikel in meinem Blog, den _matze Dir gegeben hat.



  • Ok, danke dir.
    Werde mich damit mal noch etwas mehr auseinandersetzen.

    Martin Richter schrieb:

    Das erste was ein C++ Entwickler lernen solte st die Unterscheidung der Libraries und der APIs die er benutzt 🕶

    Dazu ist dieses Forum u.a. ja da, um solche Dinge zu lernen und Tipps von Erfahrenen zu kriegen. 👍


Anmelden zum Antworten