PostThreadMessage
Имелась в виду проверка ( при помощи печати в файл ), получают ли все потоки процесса WM_QUIT при выходе из программы.Хотя, конечно, закрывается. Как и все открытые файлы, и много чего еще.
На сколько я знаю - да.
---------- Post added at 21:16 ---------- Previous post was at 21:01 ----------
Безобразие! Если послать WM_QUIT потоку слишком быстро, вскорости после создания, то это сообщение ему не доходит, и он не закрывается.
Стало быть надо еще проверять, а не создан ли уже поток успешно. Фиг проверишь. Надо вводить переменную флага внутри него.
А вообще, нафиг. Раз при закрытие программы, все потоки закрываются, ну и фиг с ним - закроется сам.
Главный поток выходит из WinMain, но программа остаётся в памяти. Надо будет сделать отладочную печать при выходе из каждого потока и проверить - завершаются ли они все в случаях "застревания".
Ведь выход из WinMain - это ещё не завершение процесса. В CRT есть код и перед вызовом WinMain, и после выхода из WinMain.
Кстати, раз ты уж такой хороший виндовый системщик, может подскажешь решение такой проблемы.
Мне необходимо синхронизироваться с VBlank. Для этого я использую функцию lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKEND,NULL) - это из DirectGraphics. Все замечательно, только эта функция отбирает быстродействие, пока ждет вертикального гашения луча. Т.е. запустил, и все, поцесс ожидания берет на себя все быстродействия компьютера. Это совершенно не айс. Мне нужнен аналог этой функции, который не берет быстродействия на себя, а аналогичен Sleep(). Или же чтобы во время VBlank пришел какой-нить колбек и разбудил мой процесс.
Спрашивал на программистких форумах, внятного ответа не увидал.
---------- Post added at 00:46 ---------- Previous post was at 00:42 ----------
И еще, какие есть возможности в винде для засыпания процесса на некоторое время кроме Sleep? Нет ли засыпания на фиксированное время с точностью до микросекунд? Потому что в слип задержка топорная. Где-то я читал, что на Sleep влияет timeBeginPeriod(), но работает не у всех.
Вычитал, что в интерфейсе IDirect3DDevice9Ex вроде бы есть функция WaitForVBlank, которая действительно умеет засыпать до начала кадра. Но, судя по докам:
Т.е. этот дополнительный интерфейс работает начиная с Висты? Проверить не могу, т.к. у меня нет вообще SDK 9, есть только 8, потому что Visual Studio 2003.DirectX 9.0L:
Предоставляет дополнительные интерфейсы IDirect3D9Ex и IDirect3DDevice9Ex с функциональностью, доступной лишь через LDDM-драйверы ОС Windows Vista.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)