Win32 - 以“安全”的方式将数据传递给CreateThread

时间:2014-09-21 15:16:56

标签: winapi c++11 shared-ptr

我有一个代码库,它使用以下模式在几个地方创建ad-hoc线程:

  1. 使用operator new创建一个结构,其中包含线程想要使用的“东西”。
  2. 致电win32 CreateThread() API。
  3. 在线程proc中,将LPVOID转换为步骤1中编辑的对象new
  4. 使用该对象,然后手动delete它。
  5. 这有效,但有几个问题:

    1. 静态代码分析器认为步骤1中的异议可能会泄露,我想这对于CreateThread失败的情况实际上是正确的。
    2. 我想要一种方法来使这更多RAII /自动。
    3. 手动播放可能容易出错。
    4. 我认为std::shared_ptr可能是解决方案,例如在步骤1中将new替换为std::make_shared。但这似乎还有其他问题:

      1. 我不认为std::shared_ptr的同一个实例可以用在另一个帖子中吗?
      2. 如果调用CreateThread的函数在线程proc开始之前退出,那么它是使用悬空指针怎么办?
      3. 有人能建议一种更优雅,更安全的方法吗?我能想到的唯一另一个选择是有一个包装CreateThread并且std::shared_ptr作为成员的类,然后将lamba称为线程proc?

0 个答案:

没有答案