首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Windows线程库到C++11

从Windows线程库到C++11
EN

Stack Overflow用户
提问于 2014-10-14 21:32:13
回答 1查看 79关注 0票数 1

我想在旧代码中删除线程处理过程中的一些Windows依赖项,如何将这段代码转换为C++11线程样式?

MyClass运行方法:

代码语言:javascript
复制
void MyClass::run()
{
    while(true)
    {
        WaitForSingleObject(startEvent, INFINITE);

        processData();

        ResetEvent(startEvent);
        SetEvent(hEvent);
    }
}

另一个类的主更新:

代码语言:javascript
复制
{
    .
    .
    .
    WaitForSingleObject(myClassInstance.hEvent, INFINITE);
    ResetEvent(myClassInstance.hEvent);

    // Getting data processed by myClassInstance in the previous update call
    // Mem copies to myClassInstance to be used later by myClassInstance processData()

    SetEvent(myClassInstance.startEvent);
    .
    .
    .
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-15 15:48:25

可以使用std::condition_variablebool轻松地创建事件类。

代码语言:javascript
复制
class Event {
  std::condition_variable cv_;
  std::mutex mtx_;
  bool signaled_ = false;

public:
  void wait() {
    std::unique_lock<std::mutex> lock{mtx_};
    while (!signaled_) {
      cv_.wait(lock);
    }
  }

  void reset() {
    std::lock_guard<std::mutex> lock{mtx_};
    signaled_ = false;
  }

  void set() {
    {
      std::lock_guard<std::mutex> lock{mtx_};
      signaled_ = true;
    }
    cv_.notify_one();
  }
};

其结果是:

代码语言:javascript
复制
struct MyClass {
  Event start;
  Event ready;

  void processData();
  void run();
};

void MyClass::run() {
  while (true) {
    start.wait();

    processData();

    start.reset();
    ready.set();
  }
}

void main_update_in_another_class() {
  ready.wait();
  ready.reset();

  // Getting data processed by myClassInstance in the previous update call
  // Mem copies to myClassInstance to be used later by myClassInstance processData()

  start.set();

  // Do other things that don't require access to myClassInstance
}

在Coliru看现场演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26370723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档