我正在用C#和Mono编写游戏。我执行游戏循环并在窗口空闲时(即消息队列为空时)进行渲染。我了解如何在Windows上执行此操作(使用P / Invoke从“ User32.dll”导入PeekMessage),但是我不知道如何在Linux构建中获取有关消息队列状态的相同信息。我已经浏览了Github上的Mono仓库,它看起来并不像直接暴露给消息队列。如果有帮助,我正在运行的Linux版本是Peppermint。任何对此的指导将不胜感激。
bool WindowIsIdle()
{
#if Windows
NativeMessage result;
return PeekMessage(out result, IntPtr.Zero, 0, 0, 0) == 0;
#elif Linux
return false; //how can I get this information?
#endif
}
#if Windows
//Imports a native Win32 function for checking the windows message queue
[System.Runtime.InteropServices.DllImport("User32.dll")]
static extern int PeekMessage(out NativeMessage message, IntPtr handle, uint filterMin, uint filterMax, uint remove);
struct NativeMessage
{
IntPtr Handle;
uint Message;
IntPtr WParameter;
IntPtr LParameter;
uint Time;
Point Location;
}
#endif