CreateThread создает поток, но не запускает функцию потока
От: DmitryShm Россия https://ipshmykov.ru/
Дата: 08.06.09 07:04
Оценка:
Проблема в том, что 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 создает поток, но не запускает функцию пото
От: Bell Россия  
Дата: 08.06.09 07:17
Оценка:
Здравствуйте, DmitryShm, Вы писали:


Приведи минимальный пример
Любите книгу — источник знаний (с) М.Горький
Re: CreateThread создает поток, но не запускает функцию пото
От: Сергей Мухин Россия  
Дата: 08.06.09 09:34
Оценка:
Здравствуйте, 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 создает поток, но не запускает функцию пото
От: OdesitVadim Украина  
Дата: 08.06.09 10:07
Оценка:
Здравствуйте, DmitryShm, Вы писали:

DS>Проблема в том, что CreateThread работает по-разному в debug и release режимах.

DS>Не могу разобраться в чем проблема.
Есть предчувствие, что где то не инициализированны все переменные. В debug'е они будут нулями, а вот в релизе... чем попало. Вот и всё.
Re: CreateThread создает поток, но не запускает функцию пото
От: DmitryShm Россия https://ipshmykov.ru/
Дата: 08.06.09 11:03
Оценка:
Синтетические тесты прошли успешно. Разобрался в чем проблема. Оказывается в коде потоковой функции вызывается логгер, который некорректно работает с потоками. А я во время отладки был слишком усталым, и не заметил этого. Логгер лочил поток.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.