-
Чувствую что туплю где-то, но около часа долбился, не выходит каменный цветок.
Сейчас я создаю поток через CreateThread, в функции потока вываливаюсь по ret, попадаю в ExitThread, все отлично работает, утечек памяти или странного поведения нет. Но MemProof и ProcessExplorer показывают что хендлы потоков все еще используются. Почитал rtfm, понял что надо делать CloseHandle хендлу. Возник вопрос как сделать так чтобы поток сам себя закрывал по завершению работы, так как следить за ними из основного откровенно не хочется. Ставил CloseHandle сразу после CreateThread, ставил в конце функции потока CloseHandle(GetCurrentThreadID), у меня поток постит сообщение в главный поток, пробовал там делать CloseHandle. Все время выдает исключение где-то в недрах Windows.
Собственно вопрос: Как правильно написать поток, чтобы хендл закрывался по завершению работы потока? Интересуют решения на WinApi, то есть что и когда вызывать. Или ссылочку где этот вопрос решен.
Первый раз возникла необходимость в потоках, наверняка вопрос поднимался 100500 раз, я просто не знаю.
-
а) Используйе BeginThread. б) Хэндл можно закрывать сразу после вызова BeginThread.
> GetCurrentThreadID
внимательно почитай в MSDN что возвращает функция GetCurrentThreadID и что требует в виде параметра функция CloseHandle. Там же почитай как правильно работать с потоками.
-
Балин.... Как всегда, только запостил вопрос, перечитал справку и увидил ошибку. Не то пихал в CloseHandle. Спать надо чаще. Сам виноват, спасибо.
-
Кстати, а что именно нужно знать о правильной работе с потоками? BeginThread делает тот же CreateThread, только вроде исключения и FPUInit малость правит, особой разницы не вижу, исключения в коде потока не использую, все на error-кодах, сопроцессор тоже не использую.
-
IsMultiThread мне тоже не важен, строки, объекты не использую, только WinApi вызовы, GlobalAlloc/Free в качестве менеджера памяти.
|