我创建了一个抽象基类,允许多个任务的实现,这可以通过MFC对话框一般调用。如果用户单击取消,则需要能够中断此任务。
abstract_dll.h:
class abstract_dll
{
public:
virtual void my_task(CFeedback *fb)=0;
}
其中CFeedback
是控制用户反馈的抽象类(即进度条)
concrete_dll.h:
class concrete_dll
{
virtual void my_task(CFeedback *fb)
{
//do some work
//step progress bar
boost::this_thread::interruption_point();
//do some work
//step progress bar
boost::this_thread::interruption_point();
}
}
extern "C" abstract_dll* get_class() { return new concrete_dll(); }
现在在MFC对话框中我加载了相应的concrete_dll并初始化了我的abstract_dll *dll = module->get_class();
然后开始调用boost::thread
dll->my_task(fb);
然后我打电话给thread.interrupt()
。线程永远不会中断,它永远不会超出我的interruption_points。我已经跟踪了线程ID它是相同的,直到我们在concrete_dll实现中,然后我只得到0x0000的线程ID。
有什么想法? PS。上面的代码只是我所拥有的伪代码。我的实际代码编译并运行,我无法让它中断。
答案 0 :(得分:2)
我认为你的问题的答案就在这里:
http://lists.boost.org/boost-users/2010/01/55171.php
简而言之:您需要在项目和DLL中链接到boost版本的boost:threads。只需输入:
#define BOOST_THREAD_USE_DLL
在<boost/thread.hpp>
包含之前(或在项目属性中)
BR