如何使用 Thread 运行类构造函数
How to use Thread to run a class Constructor
有没有办法在单独的线程中构造具有特定参数的类?
在我看到的示例中,我只能看到线程运行函数和成员函数。更具体地说,我需要它在单独的线程中运行此构造函数:
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
}
}
您可以使用
alarm()
函数在指定的时间后发出信号(SIGALRM
):
static bool alarmed = false;
extern "C" void handler(int signo)
{
alarmed = true;
}
signal(SIGALRM, handler);
alarm(5); // seconds to SIGALRM
// do stuff
// if (alarmed) ...
您可以使用 pthreads 启动该过程,当您不再喜欢您的线程时,您可以使用pthread_cancel将其杀死
伪代码
start thread
wait
cancel thread if not finished
相关文章:
- 让某个类的 '=' 运算符在声明时运行构造函数
- 在运行时有条件地删除类成员或跳过调用该成员对象的构造函数
- 如何在全局变量的构造函数之前运行函数
- 从类重载的新运算符运行非默认构造函数
- 运行 std::线程不在构造函数中
- C++:链接库两次,全局构造函数运行两次吗?
- C 从类的构造函数运行Boost线程
- 两个构造函数(带和不带参数),没有输入 -> 没有参数运行。跳过上述类中的构造函数
- 是否可以在运行时切换到不同的基类构造函数?
- 为什么在C 类构造函数的正确编译后发生运行时错误
- C 复制构造函数产生运行时错误
- 如何使用 Thread 运行类构造函数
- 如何在运行时使用构造函数初始化类中私有的数组
- C 构造函数运行时/编译时间
- 不带操作员的对象的数组初始化,复制构造函数或默认构造函数和运行时参数
- C ++ porgram 不会运行,我的构造函数是否有错误
- C++ 在超类构造函数中运行依赖于子类覆盖的大量变量的代码的正确方法是什么?
- 无法让构造函数运行
- 当构造函数运行结束时,指针变为空
- 强制模板化构造函数运行