Приветствую! При написании игры столкнулся с проблемой. В процессе работы программы создаётся новый поток вызовом BeginThread, запоминается его хэндл. Через некоторое время требуется закончить поток, для чего выставляется переменная-флаг и происходит ожидание окончания потока вызовом WaitForThreadTerminate с таймаутом 5000. Собственно проблема: поток узнаёт по флагу, что пора закругляться, завершает работу, но! WaitForThreadTerminate в основном потоке не обрабатывает момент завершения потока. Собственно, в процессе работы получил такой лог:
- Код: Выделить всё
calling WaitForThreadTerminate (handle=1420 ticks=2228)
Thread finishing (handle=1420 ticks=2267)
WaitForThreadTerminate returned 258 (ticks=7228)
Откуда видно, что ожидание происходит с правильным хэндлом, поток правильно отрабатывает момент завершения, но WaitForThreadTerminate этого не замечает и возвращает статус WAIT_TIMEOUT по истечении таймаута.
Надеюсь на помощь в разрешении ситуации!
ОС WinXP, компилятор FPC 2.0.4