Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Thread, Variablenübergabe

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
06.10.2005, 10:35 Uhr
~Flapsi01
Gast


Hallo,

ich habe mein Hauptprogramm und einen WorkerThread. An den Thread übergebe ich vom Hauptprogramm aus 2 Variablen (z.B. vom Typ char und ein CString Objekt). Diese Variablen sind global deklariert und werden sowohl im Hauptprogramm als auch im Thread durch CCriticalSection-Abschnitte synchonisiert.

Jetzt meine Frage: Ist das der richtige Weg, oder muß ich die globalen Variablen hier unbedingt "volatile" deklarieren (was mir bei einem CString Objekt noch nicht gelungen ist) ? Sollte man bei dem Linker die Optimierungen abschalten um unangenehme Überraschungen zu vermeiden (/OPT:NOREF) ?

Beim Suchen im Internet finde ich keine eindeutige Lösung. Manche machen es mit "volatile" und andere deklarieren die Variable einfach global und übergeben sie dann (abgesichert durch CCriticalSection).

Was ist der "richtige" Weg ?

Beste Grüße

Flapsi
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.10.2005, 11:00 Uhr
virtual
Sexiest Bit alive
(Operator)


Zunächstmal hat eine Criticalsection nichts mit volatile zu tun (bzgl. volatile siehe auch hier): Eine critical section verhindert, daß zwei konkurrierende Threads sich die Daten gegenseitig zermatschen, volatile bewirkt, daß eine Optimierung vom Compiler unterbunden wird.

Eigentlich mußt du die critical section so oder so nehmen.

Bzgl. volatile hast Du nur die Wahl, volatile zu verwenden oder die Optimierungen des compilers komplett zu unterbinden. Es mag auch helfen, nicht die Variablen, wohl aber die Threadfunktion volatile zu machen: dann wird eben die Optimierung für die Funktion unterbunden.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.10.2005, 23:48 Uhr
~Flapsi01
Gast


Wie kann man denn die ganze Threadfunktion "volatile" machen ? Erhalte bei:


C++:
volatile UINT  gh(LPVOID j){
    k[2]='w';
    return 0;
}



nur einen Laufzeitfehler:

" cDokumente und Einstellungen\Flapsi\Eigene Dateien\Visual Studio Projects\WriteRead\WriteReadDlg.cpp(164): error C2665: 'AfxBeginThread': Durch keine der 2 Überladungen kann Parameter 1 vom Typ 'volatile UINT (__cdecl *)(LPVOID)' konvertiert werden"

Gruß

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