Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Thread-problem

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
15.03.2004, 15:20 Uhr
~Ludwig
Gast


Hallo,
wenn ich in einem Thread:

CWinThread *thread = NULL; // global
UINT ThreadProc(LPVOID pParam) // Threadfunktion
{
MemberFunktion();
ThreadProc(&pParam);
return 0;
}

eine MemberFunktion( ) aufrufen möchte bekomme ich die Meldung:
... Aufruf einer nichtstatischen Funktion usw.

Da diese eine MFunktion schließt auch noch andere MFunktion mit ein.

Wie muss ich hier rangehen.

Danke,Ludwig
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.03.2004, 15:26 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ich vermute du musst dir einfach einen thispointer besorgen und kannst dann auf alles was du willst zugreifen....

einfach den pParam casten sollte hoffentlich funzen


C++:
MyClass *p = ((MyClass *)pParam);
//mit p->tralala sollltest du hoffentlich jetzt auf deine members zugreifen könnnen


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.03.2004, 16:09 Uhr
~toxic
Gast


hi, dann muss man aber this auch übergeben !
also so den thread starten:

C++:
thread = AfxBeginThread(ThreadProc, this);

und im thread dann den this wieder aus dem pParam hohlen:

C++:
CDeinDlg* MainDlg = ((CDeinDlg*)pParam);

und der zugriff auf eine member function/variable:

C++:
MainDlg->DeineMemberFunktion();
int i = MainDlg->m_iDeineMemberVariable;


man kann natürlich auch andere sachen in den pParam "reinstopfen", zb. ein struct:

C++:
struct THREADCFG {
    LPVOID pParam;
    int iEinInteger;
    CString sEinString;
};

void CDeinDlg::StarteThread(int iIndex)
{
    THREADCFG* test = new THREADCFG;
    test->pParam = this;
    test->iEinInteger = iIndex;
    test->sEinString = "Hallo Welt";

    thread = AfxBeginThread(tDeineThreadFunc, test);
    return;
}

UINT tDeineThreadFunc(LPVOID pParam)
{
    THREADCFG* teststruct = (THREADCFG*)pParam;
    CDeinDlg* MainDlg = (CDeinDlg*)teststruct ->pParam;
    int i = teststruct->iEinInteger;
    CString s = teststruct->sEinString;
...
    return 0;
}



--
gruß
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.03.2004, 16:35 Uhr
~Ludwig
Gast


Vielen Dank für Eure Hilfe - hat super Funktioniert !

Ludwig
 
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: