【发布时间】:2015-08-27 00:44:43
【问题描述】:
我正在尝试使用 C++ Thread Pool Library (CTPL),它令人愉快地包含在单个 header file 中。
为此,我创建了一个非常简单的测试程序。这是代码:
#include <iostream>
#include "ctpl_stl.h"
void myFunction(int threadID_0)
{
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
int main()
{
ctpl::thread_pool p(2); // We create the pool with 2 threads
p.push(myFunction); // We add work
p.push(myFunction);
p.push(myFunction);
p.push(myFunction);
p.push(myFunction);
p.push(myFunction);
p.push(myFunction);
p.push(myFunction);
p.push(myFunction);
p.stop(true); // We wait for all the tasks to be performed
return 0;
}
当我执行这个程序时,有时它可以工作,有时不能(我收到一条消息“R6010 - abort() 已被调用”)。
当我调试时,代码可用的最后一个函数调用是set_thread,错误在202行。
我注意到,当我减少或删除计时器时,它更容易崩溃。
由于这段代码很简单,我一定在原理上漏掉了一些东西。 我做错了什么?
感谢您的帮助
【问题讨论】:
-
abort()可能由于未捕获的投掷而被调用。如果是这样,请找出抛出对象的类型,如果是异常,则获取消息。 -
我注意到样本没有调用
stop- 只是观察 -
您是否设法重现错误以做出此声明 Doctorlove ?无论如何你是对的,它在调用停止之前崩溃。而且我无法捕捉到异常。
-
我指的是 github 上的示例代码——不是这段代码。
-
好的,但是在主函数结束时线程池的析构函数实际上并没有调用停止。这个样本不是很清楚。
标签: c++ multithreading exception visual-studio-2013 threadpool