c++ - 如何使用线程运行类构造函数

标签 c++ multithreading c++11 eclipse-cdt

有没有办法在单独的线程中构造具有特定参数的类?

在我看过的例子中只能看到线程运行函数和成员函数。更具体地说,我需要它在单独的线程中运行此构造函数:

 Thermistor(ukd_Adc * pAdc,
            const lookup_table_t * pLUT,
            uint8_t numOfLutElements);

我想在不同的线程中构建类以断言功能并检查边缘情况。

如果存在像指向 ukd_Adc 的指针为 NULL 的边缘情况,断言将使其陷入无限循环。该线程将允许我对构造函数运行多长时间设置时间限制,这样它就不会进入无限循环。

这是出于测试目的,因为据我所知,谷歌测试没有超时功能。

最佳答案

如果您只想在单独的线程上构造一个对象并检查它是否在特定时间限制内成功完成,请使用:

int main() { 
    std::promise<std::shared_ptr<Thermistor>> promise;
    std::future<std::shared_ptr<Thermistor>> future = promise.get_future();
    std::thread([&promise](ukd_Adc * pAdc,
                           const lookup_table_t * pLUT,
                           uint8_t numOfLutElements) {
      promise.set_value_at_thread_exit(std::make_shared<Thermistor>(pAdc, pLUT, numOfLutElements));
    }, <pAdc-value>, <pLUT-value>, <numOfLutElements-value>).detach();

    auto status = future.wait_for(std::chrono::seconds(3));
    if (status == std::future_status::ready)
    {
        // succeeded
    }
    else
    {
        // failed
    }
}

关于c++ - 如何使用线程运行类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46954794/

相关文章:

c++ - std::once_flag 相当于 BOOST_ONCE_INIT

c++ - 如何遍历 QStack 对象的元素?

c++ - 如何检查字母表中的字母在文本文件中出现了多少次 C++

c++ - 指向新对象的智能指针

c++ - setjmp 和 longjump 实现线程

c++ - 如何在 Qt 应用程序中处理纯正则表达式结果?

c++ - 在 C++ Disasm 中需要帮助

multithreading - 如何使用 mpsc channel 在线程之间创建环形通信?

.net - System.Threading.Tasks - 限制并发任务的数量

c++ - 标准 :forward inside a template class