Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » workerthread und waitforsingleobject

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
29.09.2009, 07:33 Uhr
cmos



Hallo,

aus einem Thread heraus lade ich eine Datei und update eine
ProgressBar. Die ProgressBar ist im Hauptthread. Um die
ProgressBAr upzudaten schicke ich eine Nachricht mit
PostMessage vom worker Thread ab. Das funktioniert auch soweit ganz gut.
Daten werden geladen und der Balken der ProgressBAr bewegt sich auch.

Nun wollte ich im Haupthread darauf warten das der worker Thread mit dem Laden fertig ist
und setze am Ende vom laden ein Event mit z.b. SetEvent(DataReady), damit ich danach
mit den eingelesen Daten weiterarbeiten kann.

Im Hauptthread warte ich mit WaitForSingleObject(DataReady, INFINITE). Und wenn ich das mache, mit dem WaitForSingleObject, dann sieht man nicht mehr die ProgressBar.

Event habe ich erzeugt mit
HANDLE DataReady = CreateEvent(NULL,FALSE,FALSE,NULL);

Weiß einer was ich da falsch gemacht habe ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.09.2009, 10:58 Uhr
ao

(Operator)



Zitat von cmos:
Im Hauptthread warte ich mit WaitForSingleObject(DataReady, INFINITE). Und wenn ich das mache, mit dem WaitForSingleObject, dann sieht man nicht mehr die ProgressBar.


Klar, weil der Hauptthread am Event auf den Workerthread wartet. Da kann er keine Progressbars malen.

Der Workerthread muss PostMessage machen, nicht SetEvent, wenn er mit dem Laden fertig ist.

Anderer Gedanke: Kann man, während die Datei geladen wird, überhaupt irgendwas Sinnvolles tun? Falls nicht, könntest du auch:

* die Datei im Hauptthread laden
* blockweise laden - das macht der Workerthread ja eh schon, sonst gäbe es keinen fortlaufenden Progress
* am Ende eines Blocks ein PostMessage aufs eigene Fenster machen, was dazu führt, dass der nächste Block geladen und der Progress gemalt wird.

Vastehste?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.10.2009, 21:29 Uhr
~cmos
Gast


Hallo, hab noch ne Funktion gefunden die mir die Arbeit erleichtert.
AtlWaitForMessageLoop(HANDLE)

Der übergeb ich mein Handle und die übernimmt für mich dann die Arbeit die ich sonst selber machen müsste mit Dispatch Message usw.

Grüße,
cmos
 
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: