Господа помогите юзеру советом!
Предположим есть цикл обработки сообщений, но в проге нет окон => нет и оконных процедур обработки сообщений, могу ли я поместить в очередь сообщений такого безоконного приложения(предположим из другого приложения) какое-нибудь сообщение, например, WM_QUIT для выхода из цикла.
Здравствуйте Sarkisov Sergei, Вы писали:
SS>Предположим есть цикл обработки сообщений, но в проге нет окон => нет и оконных процедур обработки сообщений, могу ли я поместить в очередь сообщений такого безоконного приложения(предположим из другого приложения) какое-нибудь сообщение, например, WM_QUIT для выхода из цикла.
Ответ: да.
Существуют сообщения, не предназначенные конкретному окну, которые обрабатываются непосредственно в цикле обработки сообщений. WM_QUIT относится именно к таким сообщениям.
Здравствуйте Аноним, Вы писали:
А>Уважаемый Alex! пожалуйста объясните почему цикл такой программы крутится ?
А>int APIENTRY WinMain(HINSTANCE hInstance, А> HINSTANCE hPrevInstance, А> LPSTR lpCmdLine, А> int nCmdShow) А>{ А> MSG msg; А> DWORD hThr;
А> hThr=GetCurrentThreadId(); А> PostThreadMessage(hThr,WM_QUIT,0,0); А> while (GetMessage(&msg,0,0,0)) { А> } А> return 0; А>} А> c уважением Сергей
Причина может быть в том, что на момент вызова PostThreadMessage у потока еще не существует очередь сообщений и функция завершается с ошибкой (надо проверить возвращаемое значение PostThreadMessage).
Чтобы заставить систему создать очеребь сообщений для потока, достаточно вызвать PeekMessage. Вот такая программа должна завершаться: