Handhabung von CWinThread



  • Ich habe eine Klasse von CWinThread abgeleitet, ein Objekt dieser angelegt und mit ResumeThread() gestartet.

    1. In der Run-Methode läuft eine Schleife. Wenn diese fertig ist, und ich versuche mit ResumeThread() den Thread nochmal zustarten, funktioniert das nicht (die Schleife wird nicht ausgeführt). Warum?

    2. Wie finde ich heraus, ob ein Thread gerade aktiv ist (nicht ob er arbeitet, sondern ob er gestartet wurde)? Gibt es das eine Methode?

    3. Gibt es eine Methode, die den Thread direkt stoppt, sozusagen ein Gegenstück zu ResumeThread()? Wenn ja, welche?



  • warum erstellst du dir eine eigene threadclasse??
    hat das einen besonderen grund

    wenn nicht würde ich es über

    AfxBeginThread(.....);

    AfxEndThread(....);

    machen



  • Wie soll ich sonst die Run-Methode überschreiben?


  • Administrator

    Ich würde mal vorschlange, dass du diese hier:
    http://msdn2.microsoft.com/en-us/library/975t8ks0.aspx
    Und alle weiterführenden Links liest. Dann weisst du, was für Möglichkeiten dir zur Verfügung stehen um dein Multithread zu realisieren 😉

    Grüssli



  • ohne jetzt einem zunahe zu treten
    ich find den gleichen link mit de-de viel besser 🙄
    http://msdn2.microsoft.com/de-de/library/975t8ks0.aspx


  • Administrator

    LowFly schrieb:

    ohne jetzt einem zunahe zu treten
    ich find den gleichen link mit de-de viel besser 🙄
    http://msdn2.microsoft.com/de-de/library/975t8ks0(VS.80).aspx

    1. Wenn man programmieren will, muss man einfach englisch verstehen. Das kann man wunderbar durch das Lesen solcher Texte erlernen. Als Hilfsmittel zum lesen, kann man z.b. http://dict.leo.org/ nehmen.
    2. Die deutschen Übersetzungen sind meistens maschinell übersetzt worden und wimmeln nur so von Fehlern. Manchmal ist es beinahe unleserlich, bzw. unverständlich was überhaupt gesagt werden soll. Und oft werden auch programmiertechnische Ausdrücke übersetzt, welche eigentlich gar nicht übersetzt werden sollten.

    Aus den 2 Gründen gebe ich die Links immer in englisch an 😉
    Wenn es jemand nicht haben will, der kann es ja gerne in de-de lesen.

    Grüssli



  • hmm also normalerweise wird doch bei den seiten die maschinell übersetzt worden sind, oben als erstes fett gedruckt darauf hingewiesen das diese seite maschinel übersetzt worden ist.

    hatte da erst gestern eine, da stand das ganz fett oben drüber. nachdem das bei der nicht so ist und ich die deutsche seite gerade gelesen habe und dort keine verherenden gramatik fehler sind denke ich die seite wurde nicht maschinel übersetzt. aus diesem grund schrieb ich

    ich find den gleichen link mit de-de viel besser

    hingegen bei der gestrigen hat man sich auch als deutscher schwehr getan das zu lesen & zu verstehn was die ins deutsche übersetzt haben.

    aber generell hast du schon recht damit 😉

    Wenn man programmieren will, muss man einfach englisch verstehen

    aber als leihe tut man sich schon manchmal mehr als hart damit.



  • Nun gut, ich habe etas gelesen und nun meinen Code analog zur "Anleitung" umgeschrieben. Meine Methode (der Inhalt des Threads) heißt weil es so schön naheliegend ist immer noch Run und mein Code sieht auszugsweise wie folgt aus:

    // irgendwo
       CWinThread *mThread;
       mThread = AfxBeginThread(Run, NULL, THREAD_PRIORITY_BELOW_NORMAL, 0, CREATE_SUSPENDED, NULL);
       // ...
    
    UINT Run(LPVOID pParam)
    {
       // ...
       return 0;
    }
    

    Aber ich erhalte bei AfxBeginThread folgende Fehlermeldung:
    error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'UINT (LPVOID)'



  • OK, der Fehler lag darin, dass Run() eine Methode einer Klasse ist. Will ich diese nutzen, muss ich die Methode als static deklarieren. Dann funktioniert es auch.


Anmelden zum Antworten