Re: Wyciek pamięci podczas kasowania wątku

Autor: Wiktor Zychla <user_at_nospam.com.eu>
Data: Fri 27 Oct 2006 - 12:56:34 MET DST
Message-ID: <ehsoq7$kt8$1@nemesis.news.tpi.pl>
Content-Type: text/plain; format=flowed; charset="iso-8859-2"; reply-type=response

> Napisałem prosty program cyklicznie tworzący, a następnie
> kasujący wątek (wątek nic nie robi i od razu kończy działanie).
>
> DWORD WINAPI DoCommunication( LPVOID data )
> {
> ExitThread( 0 );
> return 0;
> }
>
> void main()
> {
> // ...
> HANDLE hThread = CreateThread( 0, 0, DoCommunication, 0, 0, 0 );
> // ...
> CloseHandle( hThread );
> // ...
> }
>
> Po każdym wykonaniu tej operacji rośnie o 4KB pamięć procesu
> (widać to w Menedżerze Zadań) - żeby było śmieszniej na niektórych
> komputerach program działa poprawnie, np. na XP Home Edition
> jest OK (pamięć nie wycieka); na Windows 2000 Pro jest OK;
> na jednym kompie z XP Pro jest OK a na drugim (też z XP Pro)
> NIE (pamięć wycieka); na kompie z Windows Server 2003 Std.-NIE.
>
> Dodam tylko, że opisana sytuacja ma miejsce zarówno jeśli wątki
> tworzone i kasowane są funkcjami Win32 API (CreateThread
> i ExitThread), jak i funkcjami C (_beginthread i _endthread).
>
> Czy ktoś spotkał się z opisanym wyżej problemem.
> Z góry dziękuję za odpowiedź i pozdrawiam.

widzę tu dwa potencjalnie gorące miejsca.

po pierwsze, nie wiem po co wołasz ExitThread(), samo zakończenie funkcji
powinno wystarczyć.

po drugie, co się stanie jeśli wątek główny zdąży wykonać CloseHandle()
zanim wątek się zakończy? synchronizujesz to jakoś?

Wiktor Zychla
Received on Fri Oct 27 13:00:17 2006

To archiwum zostało wygenerowane przez hypermail 2.1.8 : Fri 27 Oct 2006 - 13:42:04 MET DST