C++ 使用C++;线程池库(CTPL)

C++ 使用C++;线程池库(CTPL),c++,multithreading,exception,visual-studio-2013,threadpool,C++,Multithreading,Exception,Visual Studio 2013,Threadpool,我正在尝试使用,它愉快地包含在一个单一的 为此,我创建了一个非常简单的测试程序。代码如下: #包括 #包括“ctpl\U stl.h” void myFunction(int-threadID_0) { std::this_线程::sleep_for(std::chrono::毫秒(100)); } int main() { ctpl::thread_pool p(2);//我们用2个线程创建池 p、 push(myFunction);//我们添加了功 p、 推送(myFunction); p

我正在尝试使用,它愉快地包含在一个单一的

为此,我创建了一个非常简单的测试程序。代码如下:

#包括
#包括“ctpl\U stl.h”
void myFunction(int-threadID_0)
{ 
std::this_线程::sleep_for(std::chrono::毫秒(100));
}
int main()
{
ctpl::thread_pool p(2);//我们用2个线程创建池
p、 push(myFunction);//我们添加了功
p、 推送(myFunction);
p、 推送(myFunction);
p、 推送(myFunction);
p、 推送(myFunction);
p、 推送(myFunction);
p、 推送(myFunction);
p、 推送(myFunction);
p、 推送(myFunction);
p、 停止(true);//我们等待执行所有任务
返回0;
}
当我执行这个程序时,它有时工作,有时不工作(我收到一条消息“R6010-abort()已被调用”)

调试时,代码可用的最后一个函数调用被设置为线程,错误出现在第202行

我注意到,当我减少或移除计时器时,它更容易崩溃

由于这段代码非常简单,我一定在原则上遗漏了什么。 我做错了什么


感谢您的帮助

文件ctpl\u stl.h已固定在项目网站上。尝试新版本(0.0.2)而不是旧版本。它应该有用,对我有用

ctpl_stl.h是作为ctpl.h的修改而创建的,以方便不希望依赖BOOST无锁库的用户。
ctpl.h是一个更好的选择,它经过了很好的测试,应该更有效。

abort()
可能由于未捕获的抛出而被调用。如果是这样的话,找出抛出对象的类型,如果是异常,获取消息。我注意到示例没有调用
stop
-只是观察而已。您是否设法重现错误以使此语句成为doctorlove?无论如何,你是对的,它在呼叫停止前崩溃。我无法捕获异常。我指的是github上的示例代码,而不是此代码。好的,但是线程池的析构函数在主函数末尾没有调用实际停止。这个示例不是很清楚。非常感谢您的回答,您的速度非常快!