Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Threads

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
08.12.2004, 11:07 Uhr
~Elli
Gast


Hi
Ich muß die Tage etwas zu meinem Programm erzählen und weiß nicht mehr so genau warum ich innerhalb der Threads keine Membervariablen bzw. nicht statische Variablen benutzen darf sondern den Weg über eine nicht statische Funktion, die ich innerhalb des threads aufrufe, gehen muß um diese zu ändern. Wär super wenn ihr mir da helfen könntet.
Gruß
Elli
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.12.2004, 13:51 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja ganz einfach, um eine nichtstatische Memberfunktion/variable aufrufen/verändern zu können, braucht man eine instanz davon, wenn man nun eine nichtstatische Funktion als Threadfunktion hätte, hätte diese eine ungültige instanz, da diese eigentlich nur aus der "Hauptroutine" bekannt ist. Deshalb muss man eine statische ThreadFunktion (die sozusagen "immer" da ist) verwenden und man kann nur über pointer der threadfunktion eine "vernünftige" instanz "zuteilen" mit der man dann arbeiten kann
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.12.2004, 15:16 Uhr
mmc20
puss in boots


hi, oder du benutzt einfach die threadfunktion um eine andere "thread-funktion" zu starten welche dann natürlich nicht statisch sein muss

C++:
void CDeinDlg::_StarteThread(int iIndex)
{
    AfxBeginThread(_tThreadFunktion, this);
}

UINT CDeinDlg::_tThreadFunktion(LPVOID pParam)
{
    CDeinDlg* pDlg = (CDeinDlg*)pParam;
    pDlg->_richtigerThread();
    return 0;
}

void CDeinDlg::_richtigerThread()
{
...
// hier kannst dann ganz normal auf alle members der klasse zugreifen
// eventuell musste aber einiges mit CriticalSection's absichern
...
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.12.2004, 15:53 Uhr
RHBaum



Naja, wobei die Fragestellung auch ned so 100% sauber ist :-)

Verwendest du eine C++ Bib, die dir threadunterstuetzung mitbringt (QT z.B.) , brauchst du den kram normal nich ...

Was du meinst ist sicher die Threadunterstuetzung auf WinAPI/PThread-Ebene, also ne C-Schnittstelle.

Und wie du sicherlich wissen wirst, tut sich ne C schnittstelle schwer, nichtstatische Methoden zu exportieren, weil das alles arges C++ zeugs ist ....
Da nun dein BS ne STartadresse fuer den thread brauch, also die funktion wo es loslegt ... erwartet es von dir da nen zeiger auf eine funktion mit ner definierten signatur.
Und funktionspointer gehen halt nur mit nicht - methoden (globale funktionen) oder statische Methoden (die der uebersichtlichere c++ ersatz sind)
die instanz musst dan eben per Argument uebergeben , wofuer ja dein generisches LPVoid argument in der signatur da ist

Ciao ....

Dieser Post wurde am 13.12.2004 um 15:53 Uhr von RHBaum editiert.
 
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: