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 实现的主要内容,如果未能解决你的问题,请参考以下文章

WaitForSingleObject 与联锁*

delphi WaitForSingleObject 函数 用法

Windows API一日一练 43 WaitForSingleObject函数

在界面线程不能使用Sleep和WaitForSingleObject之类的函数, 使用 MsgWaitForMultipleObjects

事件函数SetEventPulseEvent与WaitForSingleObject详解

WaitForSingleObject的作用[转]