我已经创建了一个抽象基类,以允许一个任务的多个实现,这个任务可以通过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。上面的代码只是我所拥有的伪代码。我的实际代码编译和运行,我只是不能让它中断。
发布于 2011-09-11 12:06:57
我认为你的问题的答案是:
http://lists.boost.org/boost-users/2010/01/55171.php
简而言之:您需要链接到项目和DLL中的DLL版本的boost:线程。只需把:
#define BOOST_THREAD_USE_DLL在<boost/thread.hpp>包含之前(或在项目项目中)
BR
https://stackoverflow.com/questions/7287550
复制相似问题