Проблема в том, что CreateThread работает по-разному в debug и release режимах. В debug работает нормально, запуская потоковую фукнцию, а вот в release возвращает корректный handle потока, но потоковую фукнцию не запускает. Приложение строится с помощью Visual C++ 9.0 SP1 как /SUBSYSTEM:WINDOWS, линкуется как /MD (/MT + /DLL). При компиляции и построении никаких ошибок и предупреждений нет. Когда по завершению работы я ожидаю завершения потока, то WaitForSingleObject(hThread, INFINITY); бесконечно ждет, т.е. видимо библиотека создает системный объект потока, но не запускает его, поэтому он никогда не завершится. Сама потоковая функция не содержит бесконечных циклов. boost::thread, функции _beginthread и _begintheadex работают с такими же проблемами (понятно, т.к. их вызов сводится к тому же CreateThread). Проблема возникает на всех необходимых операционных системах (XP, 2000, Vista).
Не могу разобраться в чем проблема.
Re: CreateThread создает поток, но не запускает функцию пото
Здравствуйте, DmitryShm, Вы писали:
DS>Проблема в том, что CreateThread работает по-разному в debug и release режимах. В debug работает нормально, запуская потоковую фукнцию, а вот в release возвращает корректный handle потока, но потоковую фукнцию не запускает. Приложение строится с помощью Visual C++ 9.0 SP1 как /SUBSYSTEM:WINDOWS, линкуется как /MD (/MT + /DLL). При компиляции и построении никаких ошибок и предупреждений нет. Когда по завершению работы я ожидаю завершения потока, то WaitForSingleObject(hThread, INFINITY); бесконечно ждет, т.е. видимо библиотека создает системный объект потока, но не запускает его, поэтому он никогда не завершится. Сама потоковая функция не содержит бесконечных циклов. boost::thread, функции _beginthread и _begintheadex работают с такими же проблемами (понятно, т.к. их вызов сводится к тому же CreateThread). Проблема возникает на всех необходимых операционных системах (XP, 2000, Vista).
DS>Не могу разобраться в чем проблема.
CREATE_SUSPENDED?
---
С уважением,
Сергей Мухин
Re: CreateThread создает поток, но не запускает функцию пото
Здравствуйте, DmitryShm, Вы писали:
DS>Проблема в том, что CreateThread работает по-разному в debug и release режимах. DS>Не могу разобраться в чем проблема.
Есть предчувствие, что где то не инициализированны все переменные. В debug'е они будут нулями, а вот в релизе... чем попало. Вот и всё.
Re: CreateThread создает поток, но не запускает функцию пото
Синтетические тесты прошли успешно. Разобрался в чем проблема. Оказывается в коде потоковой функции вызывается логгер, который некорректно работает с потоками. А я во время отладки был слишком усталым, и не заметил этого. Логгер лочил поток.