Windows关键部分中没有队列的概念吗?
我在专用线程中有以下渲染循环:
while (!viewer->finish)
{
EnterCriticalSection(&viewer->lock);
viewer->renderer->begin();
viewer->root->render(viewer->renderer);
viewer->renderer->end();
LeaveCriticalSection(&viewer->lock);
}
主线程进行消息处理,当我处理鼠标事件时,我尝试进入相同的临界区,但由于某种原因,它运行渲染线程一千多次迭代(大约 10 秒),在主线程最终进入之前临界区。是什么导致了这个 - 即使没有“队列”进入该部分,它不应该更像 50/50,而不是像我的情况那样的 99.9/0.1?两个线程的优先级均为 0。
添加此类队列的好方法是什么?像 bDoNotRenderAnything 这样的简单标志就足够了吗?
编辑:在我的情况下,解决方案只是添加一个事件对象(一个布尔变量也可能工作),每次消息处理程序需要访问关键部分时设置,并在使用后重置。如果设置了变量/事件,则渲染器不会进入该部分。这样消息处理程序就不必等待超过一次的渲染迭代。