Хочу вывести диалоговое окно в отдельном потоке
Посмотри его.
Это не первый такой пример по демонстрации многопоточности который грузит проц по максимуму, почему то авторы примеров не обращают на это внимание.
Они обычно показывают только необходимый минимум для понимания всей фишки не перегружая прогу деталями
А чтобы не грузить проц можно использовать 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 можно делать всякую мелкую фоновую работу не пребегая к отдельным потокам
MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
},
а в основном потоке вызывается:
CMyThread* pThread;
...
pThread->PostThreadMessage(WM_QUIT, 0, 0);
и поток довльно резво завершает свою работу. Таким образом ненужны никакие дополнительные средства типа флажков например.