powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Поведение CWinThread вынесенный в DLL
2 сообщений из 2, страница 1 из 1
Поведение CWinThread вынесенный в DLL
    #33534715
dishlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишу класс наследованый от CWinThread и использую его в своей библиотеке (MFC DLL).

Наследник СWinThread - CmyThread

Наблюдаю следующие странности
1. Если разместить в конструкторе приложения библиотеки код
Код: plaintext
1.
2.
3.
{
myThread = new CmyThread();
myThread->CreateThread(); // здесь навечно зависает
}

на создании потока виснет,
поэтому создание потока переношу в экспортируемую библиотекой функцию, там не виснет.

Чем это обусловлено?

2. В экспортируемой функции сразу после создания потока, я шлю некое сообщение ему и он его не получает
Код: plaintext
1.
2.
3.
{
myThread->CreateThread(); // ничего не виснет
myThread->PostThreadMessage(WM_MYMESS, 0 , 0 ); - это сообщение он не получит
}

но если подождать некторое время и повторить послание, то поток его получит.

Очевидно он был в процессе создания и просто не успел получить мое сообщение, как определить что поток уже готов к приемке?
Какие фукнции ожидания порекомендуете?
...
Рейтинг: 0 / 0
Поведение CWinThread вынесенный в DLL
    #33536405
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dishloПишу класс наследованый от CWinThread и использую его в своей библиотеке (MFC DLL).

Наследник СWinThread - CmyThread

Наблюдаю следующие странности
1. Если разместить в конструкторе приложения библиотеки код
Код: plaintext
1.
2.
3.
{
myThread = new CmyThread();
myThread->CreateThread(); // здесь навечно зависает
}

на создании потока виснет,
поэтому создание потока переношу в экспортируемую библиотекой функцию, там не виснет.


Видимо вы неправильно конфиругируете сборку этой DLL. ПРочитайте и проверьте макросы AFXDLL и иже с ними.

dishlo
2. В экспортируемой функции сразу после создания потока, я шлю некое сообщение ему и он его не получает
Код: plaintext
1.
2.
3.
{
myThread->CreateThread(); // ничего не виснет
myThread->PostThreadMessage(WM_MYMESS, 0 , 0 ); - это сообщение он не получит
}

но если подождать некторое время и повторить послание, то поток его получит.

Очевидно он был в процессе создания и просто не успел получить мое сообщение, как определить что поток уже готов к приемке?


WaitForInputIdle
Но догадка ваша мне кажется не верна, поскольку вы PostMessage делаете, а это должно помещать сообщение в очередь, и ваш поток его должен получить.

Какие фукнции ожидания порекомендуете?
Sleep
WaitForMultipleObjects
WaitForSingleObject
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Поведение CWinThread вынесенный в DLL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]