c++ - 创建一个boost::thread并将其传递给HANDLE

标签 c++ boost

我有以下代码:

unsigned long ClassName::fn_StartTesterPresentThread()
{
    // m_hTesterPresent is a HANDLE
    if (m_hTesterPresent == NULL)
    {
        DWORD dwThreadId = 0; 

        m_hTesterPresent = CreateThread(NULL, 0, th_TesterPresent, this, 0, &dwThreadId);
    }

    return ACTION_SUCCESS;
}
CreateThread函数是Windows特定的,但是代码需要移植到Linux /非平台特定的。
我现在需要一种创建boost::thread并将其传递到HANDLE m_hTesterPresent的方法。
我在想这样的事情:
unsigned long Class::fn_StartTesterPresentThread()
{
    if (m_hTesterPresent == NULL)
    {
        DWORD dwThreadId = 0;        

        boost::thread threadTesterPresent(&m_hTesterPresent);
        threadTesterPresent.join();
    }

    return ACTION_SUCCESS;
}
这是正确的方法吗?可悲的是,我还不能编译或测试,因为我还需要移植项目的其他部分。
此外,该项目是DLL,我还没有客户端可以调用DLL中的函数。
任何帮助表示赞赏!

最佳答案

boost::thread的参数应该是要调用的函数,此处为th_TesterPresent
如果要将这段代码移植到非Windows环境中,建议您使用typedef来区分不同类型的HANDLE。
然后您可以拥有:

#ifndef WINDOWS
  typedef boost::thread* THREAD_HANDLE;
  typedef boost::mutex MUTEX_HANDLE;
#else
  typedef HANDLE THREAD_HANDLE;
  typedef HANDLE MUTEX_HANDLE;
#endif
并在不同位置存储THREAD_HANDLE / MUTEX_HANDLE值。然后,您可以调用通用的“createThreadHandle”函数,而不是调用特定于OS的函数,这些函数会根据OS分配给不同的函数。
另外,您可以将代码移植到与OS无关的框架(例如boost),并一次性解决两个问题。

关于c++ - 创建一个boost::thread并将其传递给HANDLE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64134622/

相关文章:

c++ - 如何使用 boost 实现跨多个方法的递归锁?

c++ - boost::program_options - 验证失败时在错误消息中显示用户输入的值

c++ - 虚拟机中的OpenGL问题

c++ - 通过引用传递 std::string 数组

c++ - MPI发送和接收的通信成本

c++ - 非 NULL 保留指针值

c++ - 我如何在 C++ 中实现两个类之间的关联?

c++ - boost lambda for_each/转换拼图

c++ - 在 C++ 中分两步将参数绑定(bind)到函数?

boost - 如何编译boost async_client.cpp