Здравствуйте, Tarantul, Вы писали:
T>Здравствуйте, Аноним, Вы писали:
А>>????
А>>Да но у тебя не MsgWait... а WaitForSingle... я не проверял но такая штука не должна работать корректно. Я имею ввиду что с timeout 0 ты попадаешь в бесконечный цикл вплоть до выхода из фонового потока т.е. есть сообщение — обрабатываешь его нет — проверяешь по новой. На мой взгляд недстаток в том что такой цикл по идее должен загрузить на все 100% процессор. Все равно что поставить
А>> for (int i = 0; i < 1000000000; i++);
А>>В то время как MsgWait... ждет либо события ( в данном случае выход из потока) либо сообщения причем все то время что ни событие ни сообщение не пришло твое приложение находиться в idle, процессор не загружен и остальные приложения могут работать....
А>>vadik77
T>Именно WaitForSingle..., причем в этом "бесконечном" цикле есть выборка сообщений, так что процессор вроде на 100% не грузиться и работает все нормально.
#include "stdafx.h"
#include <stdlib.h>
#include <iostream.h>
#include <windows.h>
DWORD threadFunc(LPVOID lpParam)
{
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
DWORD dwThread = 0;
HANDLE m_hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)threadFunc, NULL,
CREATE_SUSPENDED, &dwThread);
if (m_hThread)
{
bool fWaiting=true;
while(fWaiting)
{
if(WaitForSingleObject(m_hThread,0)==WAIT_TIMEOUT)
{
MSG msg;
if(PeekMessage(&msg, NULL, 0, 0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else fWaiting=false;
}
}
int c;
cin >> c;
return 0;
}; // main
zagruzka processora 100%...