我有以下代码:
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/