【发布时间】:2011-09-02 18:08:22
【问题描述】:
我创建了一个抽象基类以允许多个任务的实现,可以通过 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 对话框中,我加载了适当的具体_dll 并初始化我的 abstract_dll *dll = module->get_class();
然后启动一个新的boost::thread,它调用dll->my_task(fb);
然后当我打电话给thread.interrupt()。线程永远不会被中断,它永远不会在我的中断点除外。我已经跟踪了线程 ID,它是相同的,直到我们在具体_dll 实现中,然后我只得到 0x0000 的线程 ID。
有什么想法吗? PS。上面的代码只是我所拥有的伪代码。我的实际代码编译并运行,我就是无法让它中断。
【问题讨论】:
标签: multithreading boost mfc abstract-class