Я пишу движок для консольных игр. Игровой цикл в нем обрабатывается отдельной функцией потока:
hThread = CreateThread(
NULL,
0,
&_GameThread,
_self,
0,
&dwThreadID);
WaitForSingleObject(hThread, INFINITE);
_GameThread()
сам пока содержит просто while(1)
. Довольно просто.
Мне нужно каким-то образом управлять элементами управления в игре, поэтому я выбрал подход к созданию окна сообщения, которое переводит кнопки, нажатые в некоторый массив, который затем обрабатывается функциями в потоке для какого-либо действия (движение, поворот и т. Д.) , Также сделана функция, которая передает сообщение в скрытое окно:
int _DispMessage()
{
MSG msg;
int gResult;
if(gResult = GetMessageW(&msg, 0, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return gResult;
}
Без потока эта функция работает нормально, но когда выходит игровой цикл, изнутри не поступает никаких сообщений, кроме сообщений о создании. Итак, вопрос в том, как сделать сообщения асинхронными, чтобы я мог помещать коды клавиш в очередь, а затем извлекать их в игровом цикле?
У меня есть только основной процесс, который выполняет движок и один поток.