Здравствуйте, found, Вы писали:
F>* В деструкторе объекта поток при необходимости завершается, время жизнь объекта > времени жизни потока
Как объект завершает поток? (надеюсь не TerminateThread...) У него есть хендл на него? А если не успеет записать хендл до вызова деструктора? Между созданием потока и возвращением из CreateThread может многое произойти...
F>* Сам вызов функции происходит в потоке следующим образом:
F>вход в критическую секцию, привязанную к конкретному объекту, вызов функции, которая сигнализирует событие, ожидание внешнего события, выход из критической секции.
Очень экзотические краши бывают при попытке зайти в невалидную критическую секцию...
F>* Класс ни от чего не наследуется и от него тоже ничего не наслудется
F>* Есть только static_cast при запуске потока, описанный в примере
F>* Дальше кода в конструкторе нет, предполагал данный вариант, поэтому переместил создание потока в самый конец
Это хорошо, деструкторы не в счёт.
F>Единственный нюанс этой теории: если вынести запуск потока в отдельную функцию-член класса, т.е. вместо: new Foo(...), писать
F>F>Foo* obj = new Foo(...);
obj->>init();
F>
это кстати всегда хорошо
F>Думаю просмотреть сейчас сам код, который генерирует компилятор, в поисках иных зацепок. Больше вариантов, к сожалению, нет.