Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Nachricht vom Thread, wenn fertig

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.09.2005, 10:13 Uhr
Wiesenlieger



Hi Leute,

hab mit einen kleinen Workerthread gebaut, der im Hintergrund etwas suchen soll, während ich an meiner Dialoganwendung theoretisch weiterarbeiten kann.
Erzeugt wird er mit :

C++:
CWinThread* m_pSearchThread = AfxBeginThread(MainFunc, &m_Search);


UINT MainFunc(LPVOID pParam)
{
    Search* lpSearch = (Search*)pParam;
    // Zeiger auf Fortsetzungsflag holen
    bool* pbContinue = lpSearch->GetContinue();

    // suchen
    lpSearch->SearchObjects();

    return 0;
}




Ich kann den Thread starten und auch wieder abbrechen aber ich würde gern erfahren, wenn er fertig ist! Also nicht den Beendigungscode abfragen, sondern ein "Habe fertig!" vom Thread bekommen. Wie kann man das mache?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.09.2005, 10:53 Uhr
ao

(Operator)


SendMessage an das Dialogfenster?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.09.2005, 11:15 Uhr
Wiesenlieger



SendMessage erfordert doch mindestens einen Zeiger auf das Dialogfenster.
Den kann ich nicht übergeben, da ich dann die HeaderDatei vom Dialog includen muß.
im Dialog Header vom Threadobjekt <-> im Threadobjekt Header vom Dialog
---> Schleife, Linker mag das nicht
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.09.2005, 11:23 Uhr
Tommix



Hallo,
solange nur ein Zeiger auf den Dialog im Header steht, genügt eine Vorwärtsdeklaration.
Du kannst die Threadfunktion aber auch zum statischen (!) Member des Dialoges machen.

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.09.2005, 11:30 Uhr
mmc20
puss in boots


das kann man auf 2 arten lösen, die einfache ist über OnCommand()

C++:
enum { WMU_FERTSCH = WM_USER, ... }
...
UINT CDeinDlg::_ThreadFunc(LPVOID pParam)
{
    CDeinDlg* pDlg = (CDeinDlg*)pParam;

    pDlg->SendMessage( WM_COMMAND, (WPARAM)WMU_DBREADY, 0 );
    return 0;
}

BOOL CDeinDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
    switch( (UINT)wParam )
    {
        case WMU_FERTSCH:
        {
            // ...
        }
        break;
    }    
    return CDialog::OnCommand(wParam, lParam);
}


auf die art sparste dir das einbinden in die message map.

Dieser Post wurde am 16.09.2005 um 11:33 Uhr von mmc20 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
16.09.2005, 13:32 Uhr
Wiesenlieger



@tommix
was meinst du mit "Vorwärtsdeklaration"?

@mmc20
funktioniert leider nicht

bei mir muß es heißen:

C++:
UINT CDeinDlg::_ThreadFunc(LPVOID pParam)
{
    COtherObj* pObj = (COtherObj*)pParam;
....
}


- macht ja keinen Sinn den gleichen Dialog nochmal zu starten (falls das überhaupt geht)
- COtherObj ist KEIN Dialog, d.h. ich müßte
BOOL SendMessage(HWND ZielWindowHandler, Nachricht, param, param)
verwenden, geht aber nicht, da mein Dialog nur einen NULL-Handler hat (warum auch immer)

kann man dem Dialog vielleicht explizit einen Handler zuweisen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
16.09.2005, 13:49 Uhr
Tommix




Zitat von Wiesenlieger:

was meinst du mit "Vorwärtsdeklaration"?



C++:
class CDeinDlg;

void foo(CDeinDlg* pDlg); // obwohl DeinDlg.h nicht eingebunden ist (das passiert erst in der cpp - Datei)



Gruß, Tommix

Dieser Post wurde am 16.09.2005 um 13:50 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
16.09.2005, 14:15 Uhr
Wiesenlieger



@Tommix

Vielen Dank!
Manchmal ist es so einfach;-)
Man muss nur wissen wie.

klappt hervorragend
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: