Was braucht beim Thread-Beenden Zeit?

02/11/2010 - 19:25 von Stefan Reuther | Report spam
Hallo,

ich habe ein Programm, das aus mehreren Threads besteht. Beim Programm-
ende werden diese Threads alle beendet (Signalisierung über Semaphore,
WaitForSingleObject auf den Thread-Handle). Nun habe ich festgestellt,
dass zwischen dem Beenden des Threads (ExitThread) und der Rückmeldung
von WaitForSingleObject ca. 110 ms vergehen, gemessen mit GetTickCount
vor dem ExitThread und nach dem WaitForSingleObject.

In einem kleinen Testprogramm ist der Effekt selbstverstàndlich nicht
reproduzierbar. Das eigentliche Programm macht RS232, TCP/IP und GUI.

Mir ist duster in Erinnerung, dass sich Threads bei allen geladenen DLLs
abmelden, aber auch Einbinden der DLLs (kernel32, user32, gdi32,
advapi32, comdlg32, ws2_32) in ein kleines Testprogramm zeigt diesen
Effekt nicht.

Wàhrend der Wartezeit wird die CPU nicht belastet.

Woran kann das liegen bzw. wie debuggt man sowas am kleversten? Das
Programm ist ein normales Win32-Programm (ohne MFC, .net usw.) mit
VisualStudio 2005, unter XP SP3.


Stefan
 

Lesen sie die antworten

#1 Martin Richter [MVP]
03/11/2010 - 07:59 | Warnen spam
Hallo Stefan!

ich habe ein Programm, das aus mehreren Threads besteht. Beim Programm-
ende werden diese Threads alle beendet (Signalisierung über Semaphore,
WaitForSingleObject auf den Thread-Handle). Nun habe ich festgestellt,
dass zwischen dem Beenden des Threads (ExitThread) und der Rückmeldung
von WaitForSingleObject ca. 110 ms vergehen, gemessen mit GetTickCount
vor dem ExitThread und nach dem WaitForSingleObject.



GetTickCount hat IMHO nur eine Auflösung von 50msec. Du solltest
vielleicht mal QueryPerformanceCounter verwenden, um eine genaue Messung
zu bekommen.

Semaphore? Ich hàtte einen Event genommen, aber wahrscheinlich egal.

Die Frage wàre: Was macht Dein Thread wenn er beendet wird?
Wie viele Threads werden beendet?

Immerhin wird der Threadstack freigegeben und einige andere interne
Dinge. Hat Dein wartender Thread eine normale Prio?


Martin Richter [MVP] WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written
program is its own hell!" The Tao of Programming
FAQ: http://www.mpdvc.de Samples: http://www.codeproject.com

Ähnliche fragen