WaitForSingleObject 函数的 Boost 实现
Posted
技术标签:
【中文标题】WaitForSingleObject 函数的 Boost 实现【英文标题】:Boost implementation for WaitForSingleObject-function 【发布时间】:2020-10-01 08:45:11 【问题描述】:我正在移植一些特定于 Windows 的代码来提升。
我有以下功能:
//m_hTesterPresent is a boost::thread*
unsigned long Class::fn_StopTesterPresentThread()
// Check if tester-present is running, close it
if (m_hTesterPresent)
m_bTesterPresentRunning = FALSE;
WaitForSingleObject(m_hTesterPresent, INFINITE);
m_hTesterPresent->~thread();
//CloseHandle(m_hTesterPresent);
m_hTesterPresent = NULL;
return ACTION_SUCCESS;
如何等待m_hTesterPresent
处理的线程完成,模拟WaitForSingleObject
Windows 函数?
任何帮助表示赞赏!
【问题讨论】:
boost::thread::join? 【参考方案1】:m_hTesterPresent->~thread()
?你认为那有什么作用?我们没有看到所有代码,但这几乎肯定是错误的。
最后一句话的答案是boost::thread::join
,但~thread
行表明您可能错误地使用了boost::thread
,因此join
可能看起来失败了。
【讨论】:
那我该如何正确关闭进程的句柄呢? 句柄处理?我假设你的意思是线程。这与任何其他 C++ 对象一样工作。Class::~Class
将摧毁它。您可以通过将其设置为非运行线程来提前清理:m_hTesterPresent = boost::thread
。
是的,我的意思是线程 - 对不起。所以我要销毁它,然后将它设置为非运行线程,或者我将如何做。我对 Threads 和 boost 还很陌生。
@RomanRoth:也可以查看std::thread
,与boost::thread
基本相同。确切的答案将取决于您的 Class
做什么,以及它的线程做什么。如果线程在Class
的生命周期内运行,则通常的 C++ ctor/dtor 模式有效。您只需要确保您的线程知道何时停止(与 Windows 线程没有区别),并在 Class::~Class
中调用 join
。以上是关于WaitForSingleObject 函数的 Boost 实现的主要内容,如果未能解决你的问题,请参考以下文章
delphi WaitForSingleObject 函数 用法
Windows API一日一练 43 WaitForSingleObject函数
在界面线程不能使用Sleep和WaitForSingleObject之类的函数, 使用 MsgWaitForMultipleObjects