Re[5]: Опять про потоки.
От: vadim77 Израиль  
Дата: 24.11.03 11:18
Оценка:
Здравствуйте, 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%...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.