Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Хочу вывести диалоговое окно в отдельном потоке

1.1K
06 сентября 2002 года
Thorn
10 / / 20.06.2000
У меня есть диалоговое окно с кнопками. При нажатии на одну из кнопок происходят продолжительные вычисления. Я хочу вывести диалоговое окошко с сообщением, что идёт процесс вычисления, как только процесс вычисления закончился окошко должно уничтожиться вместе с потоком.
645
07 сентября 2002 года
Eugals
12 / / 20.02.2000
В MSDN есть MFC-шный sample, называется MUTEXES.
Посмотри его.
1.1K
09 сентября 2002 года
Thorn
10 / / 20.06.2000
Спасибо за пример. Только он процессор грузит на 100%, а когда вычисления происходят параллельно, это не очень хорошо, но GetMessage, TranslateMessage, DispatchMessage решили эту проблему (для диалогового окна). Это не первый такой пример по демонстрации многопоточности который грузит проц по максимуму, почему то авторы примеров не обращают на это внимание.
380
09 сентября 2002 года
Arestov
285 / / 20.09.2000
Цитата:

Это не первый такой пример по демонстрации многопоточности который грузит проц по максимуму, почему то авторы примеров не обращают на это внимание.



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

А чтобы не грузить проц можно использовать WaitMessage для останова проги, когда ничего делать не надо.
Вот промер главного цикла
bool bDone = false;
int nIdleCount;
MSG msg;
do{

while (PeekMessage(&msg,..,PM_REMOVE)
{
Translate/Dispatch...
nIdleCount = 0;
}
if (!DoBackgroundWork(nIdleCount++))
WaitMessage();
} while(bDone = false);

То есть мы передаём некоторой ф-ции номер холостого цикла и она исходя из этого номера решает что делать т.е. сколько времени программа уже на холостом ходу , если ей еще есть что сделать она возвращает true, а если нет то false и холостой ход останавливается до следующего сообщения.
в DoBackgroundWork можно делать всякую мелкую фоновую работу не пребегая к отдельным потокам

1.1K
16 сентября 2002 года
Thorn
10 / / 20.06.2000
В методе класса производного от CWinThread (CMyThread к примеру) переопределяется виртуальная функция Run и в ней создаётся цикл:
MSG msg;

while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
},
а в основном потоке вызывается:
CMyThread* pThread;
...
pThread->PostThreadMessage(WM_QUIT, 0, 0);
и поток довльно резво завершает свою работу. Таким образом ненужны никакие дополнительные средства типа флажков например.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог