如何解决创建一个boost :: thread并将其传递给HANDLE
unsigned long ClassName::fn_StartTesterPresentThread()
{
// m_hTesterPresent is a HANDLE
if (m_hTesterPresent == NULL)
{
DWORD dwThreadId = 0;
m_hTesterPresent = CreateThread(NULL,th_TesterPresent,this,&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),并一次性解决两个问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。