Re[4]: Снова this в конструкторе
От: found Россия ak239.ru
Дата: 01.03.12 20:55
Оценка:
Здравствуйте, Caracrist, Вы писали:

C>Как объект завершает поток? (надеюсь не TerminateThread...) У него есть хендл на него? А если не успеет записать хендл до вызова деструктора? Между созданием потока и возвращением из CreateThread может многое произойти...


В данный момент гарантируется тот факт, что объект не может быть уничтожен до завершения потока, логикой работы программы.
Раньше использовал TerminateThread, какие нюансы могут при этом возникать. Мои рассуждения, сводились к тому, что насильно уничтожается стек объекта, что может приводит к нежелательным последствиям. Может ли вызов этой функции влиять на другие потоки и кучу приложения?

F>>* Сам вызов функции происходит в потоке следующим образом:

F>>вход в критическую секцию, привязанную к конкретному объекту, вызов функции, которая сигнализирует событие, ожидание внешнего события, выход из критической секции.
C>Очень экзотические краши бывают при попытке зайти в невалидную критическую секцию...

Критическая секция инициализируется с помощью функции InitializeCriticalSection внутри конструктора до создания потока. Но, т.к. , все поля класса имеют невалидные значения в отладчике во время ошибки, то и критическая секция является неверной.

С утра внимательно просмотрю код, возможно, не вижу какой-то банальной ошибки. Либо просто, действительно, не стоит в принципе создавать поток внутри конструктора. Но т.к. проект учебный интересно докопаться до нюансов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.