Re[3]: Снова this в конструкторе
От: Caracrist https://1pwd.org/
Дата: 01.03.12 20:33
Оценка:
Здравствуйте, found, Вы писали:

F>* В деструкторе объекта поток при необходимости завершается, время жизнь объекта > времени жизни потока

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

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

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

F>* Класс ни от чего не наследуется и от него тоже ничего не наслудется

F>* Есть только static_cast при запуске потока, описанный в примере
F>* Дальше кода в конструкторе нет, предполагал данный вариант, поэтому переместил создание потока в самый конец
Это хорошо, деструкторы не в счёт.

F>Единственный нюанс этой теории: если вынести запуск потока в отдельную функцию-член класса, т.е. вместо: new Foo(...), писать

F>
F>Foo* obj = new Foo(...);
obj->>init();
F>


это кстати всегда хорошо


F>Думаю просмотреть сейчас сам код, который генерирует компилятор, в поисках иных зацепок. Больше вариантов, к сожалению, нет.
~~~~~
~lol~~
~~~ Single Password Solution
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.