Thread mit Parametern



  • warum volatile ?



  • ...damit der Compiler nicht auf dumme Ideen kommt.
    Sowas wie den abzufragenden Wert in ein Prozessorregister zu packen.
    Dann klappt das mit dem auf TRUE setzen natürlich nicht und
    der Task Manager hat wieder was zu tun 😉



  • volatile ist an dieser Stelle total sinnlos



  • Na super, damit ist jetzt allen geholfen! 😡
    Kannst du auch erklären warum, oder kannst du hier nur dumm herumtrollen?



  • Weil Du den Zeiger volatile machst, und nicht die Struktur selbst. Und der Zeiger ist nur innerhalb des Threads bekannt, also ist es nicht nötig, dass der Zeiger volatile ist.



  • Einspruch!

    Im Petzold ist das aber ganz anders beschrieben.
    Dort verwendet er eben aus dem vom mir genannten Grund "volatile"!
    Wer es nicht glaubt, kann das auf der Seite 1137 nachlesen (5. Auflage). 😃



  • Tja, dann ist das anscheinend ein Fehler im Petzold. pparams ist volatile, aber sinnvoll wäre es nur, wenn *pparams volatile wäre.
    "Bitte beachten Sie, dass die Variable pparams inThread als volatile deklariert ist. Dieser Qualifizierer soll dem Compiler anzeigen, dass die Variable auf indirektem Weg verändert wird [...]" - wo wird pparams bitte indirekt verändert???



  • In der MSDN steht:

    Objects declared as volatile are not used in optimizations because their value can change at any time. The system always reads the current value of a volatile object at the point it is requested, even if the previous instruction asked for a value from the same object. Also, the value of the object is written immediately on assignment.
    *

    Indirekt, weil in einem anderen Thread.
    In diesem Fall in der Hauptnachrichtenschleife des Prozesses.
    Zumindest verstehe ich das so.



  • Original erstellt von TKool:
    **In der MSDN steht:

    Objects declared as volatile are not used in optimizations because their value can change at any time.
    *

    Indirekt, weil in einem anderen Thread.
    In diesem Fall in der Hauptnachrichtenschleife des Prozesses.
    Zumindest verstehe ich das so.**

    Ich weiss, was volatile heisst. Allerdings ist pparams != *pparams



  • TKool schrieb:

    Einspruch!

    Im Petzold ist das aber ganz anders beschrieben.
    Dort verwendet er eben aus dem vom mir genannten Grund "volatile"!
    Wer es nicht glaubt, kann das auf der Seite 1137 nachlesen (5. Auflage). 😃

    Im Petzold wird die Structur aber so gebaut:

    typedef struct 
    { 
        HWND hwnd;
        BOOL bContinue; // _ohne_ volatile
    }PARAMS, *PPARAMS;
    

    Dafür wird dann im Thread volatile benützt...

    Was mich persönlich noch interessiert!
    Der Herr Petzold benutzt ja Im Thread _endthread();
    Ich denk das soll man nich damit der Thread von alleine "ausläuft" und nicht einfach gekillt wird?!?!



  • fredd-ausbuddler schrieb:

    Der Herr Petzold benutzt ja Im Thread _endthread();
    Ich denk das soll man nich damit der Thread von alleine "ausläuft" und nicht einfach gekillt wird?!?!

    Der Herr Petzold programmiert auch kein C++, sondern C. Und in C ist es völlig legal, _endthread() aufzurufen.
    Seine Dateien haben die Endung .c und nicht .cpp.



  • cd9000 schrieb:

    Der Herr Petzold programmiert auch kein C++, sondern C.

    In gewisser Hinsicht ein überzeugendes Argument...

    (bitte nicht hauen!)
    Aber wenn meine kleinen Dateien ein ++ hinter dem *.c haben dann ist es nicht mehr so gut _endthread() aufzurufen oder?



  • cd9000 schrieb:

    Und in C ist es völlig legal, _endthread() aufzurufen.

    In C++ ist es ebenfalls völlig legal, _endthread aufzurufen. Bei falscher Handhabung passiert in beiden Fällen dummes Zeug, in C++ bekommt man das natürlich wesentlich schneller hin. Sinnlos bleibt _endthread aber immer.

    Da das Abwürgen von Thread aber bei einigen Menschen ein krankhafter Zwang ist, verwendet Herr Petzold _endthread. Es soll nämlich niemand auf die Idee kommen, etwa ExitThread in einem mit _beginthread erstellten Thread zu verwenden.



  • ThX!


Anmelden zum Antworten