gpt4 book ai didi

c++ - C++ 中的自定义阻塞函数

转载 作者:行者123 更新时间:2023-11-28 03:23:49 44 4
gpt4 key购买 nike

我正在创建基于 while(true) 的三个线程和一个阻塞函数的应用程序模型。

  1. 事件线程 - 等待用户输入,被 SDL_WaitEvent 阻塞
  2. Socked 线程 - 等待来自服务器的数据,被阻塞套接字阻塞。
  3. 呈现线程 - 从缓冲区呈现数据,而不是阻塞。

我在渲染线程方面遇到问题 - 我需要一个阻塞函数,例如,它会阻塞直到某个绘制事件(由我定义并在其他两个线程之一中分派(dispatch))发生。
但我不知道阻塞函数是如何工作的。当然,我可以创建一个 sleep() 循环,但这样的循环具有固定的 FPS 占用资源,即使什么也没发生(我已经详细说明了该主题 here )。另一方面,它不会立即显示数据。这对 GUI 应用程序不利。

最佳答案

如果您使用的是 C++11,则可以使用 std::condition_variablestd::mutex:

void
waitForEvent()
{
std::unique_lock<std::mutex> lock( myMutex );
while ( ! externalCondition ) {
myConditionVariable.wait( lock );
}
}

触发事件:

void
setEvent()
{
std::unique_lock<std::mutex> lock( myMutex );
setExternalCondition();
}

另一方面,您提到了 GUI 和渲染器。你不能等待 GUI 线程中的外部条件。如果你需要在 GUI 线程中进行渲染,你必须了解如何在 GUI 管理器中创建 GUI 事件,然后发布GUI 事件。

关于c++ - C++ 中的自定义阻塞函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14690990/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com