Thread - CWinthreads



  • Ho, ich hab nur mal kurz ne Frage zu Deinem Threaddefault......
    Welches ist denn der Threadkonstruktor, dem ich z.B. Handles mitgeben könnte, damit diese dem Thread als "Variablen" bekannt sind, und wie müsste das syntaktisch aussehen, wenn ich dem Konstruktor handles mitgebe???? Ich hab auch mal was über Setter-Methoden gelesen, nur find ichs nichmehr! Damit, so sagte man mir, wäre es auch möglich dem Thread die Handles "bekannt" zu machen!!!

    Vielen Dank schon mal!!!!

    Seb

    [ Dieser Beitrag wurde am 06.03.2002 um 10:01 Uhr von Unix-Tom editiert. ]



  • Du erstellt im Thread eine Membervariable.

    Der Thread wird im Suspendmodus gestartet. Dh er existriert aber wird noch nicht ausgeführt.
    Nachdem starten des Threads kannst du seine Membervariablen füllen.

    m_pDisplayThread =(threadklasse*)
                AfxBeginThread(RUNTIME_CLASS(threadklasse), NULL,
                0, CREATE_SUSPENDED);
    
    m_pDisplayThread->SetOwner(this);
    // Hier wird dem Thread der Zeiger des Hauptthreads bekannt gemacht
    // Um vom Thread auf Member des Hauptdialogs zugreifen zu können.
    
    m_pDisplayThread->systemstatus = 1;
    // wenn es die membervar int systemstatus im Thread gibt dann wird
    // Hier diese auf 1 geändert
    
        m_pDisplayThread->ResumeThread();    
    // Hier wird der Thread dann endgültig gestartet und fängt mir seiner
    // Arbeit in der funktion Run() an.
    

    Zugriff auf Member des Hauptdialogs dann im Thread mit

    m_pOwner->m_list.AddString("mein string in einer Listbox");

    Vorsicht vor syncronisierung. Diese ist nicht vorhanden.
    Wenn es nur einen Thread gibt und es schreibt nur einer in die Listbox dann gibt es kein Problem. Sonst muß man Syncronisieren.



  • Ahhhja, das is schonmal fein!! Danke!!
    Aber was meinst Du mit dem (this) bei:

    m_pDisplayThread->SetOwner(this);
    

    ...das versteh ich noch nich so ganz....da muss dann ein Zeiger zum Handle hin?.....
    ....und das mit der Listbox (?!?!) welchen string meinst Du da?

    Danke nochmals!!

    Schön´Tach sonst noch!

    Greetz!

    Seb



  • this zeigt immer auf die eigene Klasse. Also kann man über diesen Zeiger auf die Klasse des Hauptthreads zugreifen. Das mit der Listbox ist glaub ich nur ein Beispiel, da diese Listbox in der Hauptthreadklasse definiert ist.



  • Das ist richtig. this ist der Zeiger auf den Hauptdialog.

    Listbox war nur ein ein Bsp. Du kannst damit mit m_pOwner auf alle member deines Dialogs zugreifen.
    m_pOwner-> und hier deine Variablen oder sonstwas als würdes du es der Hauptdialogklasse machen.



  • Ho nochmal!Und vielen Dank schon mal für die Antworten...mit m_pThreadgo->Setowner(this) krieg ich jetz folgende Fehlermeldung:
    D:\***050202\***Dlg.cpp(429) : error C2039: 'SetOwner' : Ist kein Element von 'thread'
    D:\***050202\thread.h(15) : Siehe Deklaration von 'thread'
    thread.cpp

    Wie muss ich denn das in der thread.h deklarieren.......??!!?? sory, is noch früh am Mmorgen!?!?! Ich probiers halt ma selbst aber ihr könnt ja ma posten, bin für Hilfe sehr dankbar!

    Grüsse!

    Seb



  • Sorry, aber das mit dem SetOwner und dem m_pOwner blick ich irgendwie net.....Tom, bissu heut Abend mit ICQ online? dann kann man sich vielleicht mal kurz unterhalten?!?!?!?!?...........
    Ich muss das Problem so schnell wie möglich gelöst kriegen, weil für Hiwijob.......

    Danke, vielleicht bis später..!!!

    Seb



  • void SetOwner(xxxDlg* pOwner) { m_pOwner = pOwner; };

    Dies steht im Thread. Also als Funktion der Threadklasse wobei du
    xxxDlg durch deinen Hauptdialogklassennamen ersetzen musst.

    Header des Dialogs in den Thread includieren.

    Somit kannst du, nachdem der Thread gestartet wurde auf die Funktion
    SetOwner zugreifen und dem Thread den this-Zeiger des Hauptdialogs übergeben.



  • hmmm ich glaub jetz hab ichs!!!

    Vielen, vielen Dank!!!!



  • Ich schiebe dieses Posting mal in die FAQ falls noch jemand Threads braucht.


Anmelden zum Antworten