Multithreading 在boost线程上调用抽象函数,不会在中断点中断
我创建了一个抽象基类,以允许任务的多个实现,可以通过MFC对话框进行一般调用。如果用户单击“取消”,则需要能够中断此任务 abstract\u dll.h:Multithreading 在boost线程上调用抽象函数,不会在中断点中断,multithreading,boost,mfc,abstract-class,Multithreading,Boost,Mfc,Abstract Class,我创建了一个抽象基类,以允许任务的多个实现,可以通过MFC对话框进行一般调用。如果用户单击“取消”,则需要能够中断此任务 abstract\u dll.h: class abstract_dll { public: virtual void my_task(CFeedback *fb)=0; } class concrete_dll { virtual void my_task(CFeedback *fb) { //do some work
class abstract_dll
{
public:
virtual void my_task(CFeedback *fb)=0;
}
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(); }
其中,cf反馈
是一个抽象类,用于控制用户反馈(即进度条)
concrete\u dll.h:
class abstract_dll
{
public:
virtual void my_task(CFeedback *fb)=0;
}
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_任务(fb)代码>
然后当我调用thread.interrupt()
时。线程从不中断,在我的中断点也不例外。我已经跟踪了线程ID,它在具体的dll实现之前是相同的,然后我只得到了线程ID的0x0000。
有什么想法吗?上面的代码只是我所拥有的伪代码。我的实际代码是编译和运行的,我就是不能让它中断。我想你的问题的答案是:
简而言之:您需要链接到项目和DLL中boost:threads的DLL版本。只需将
#define BOOST_THREAD_USE_DLL
包含之前(或项目财产中)
BR谢谢!我们在当天晚些时候找到了多种数据结构。但是我们没有找到BOOST_THREAD_USE_DLL,但是我们通过将中断放在CFeedBack中解决了这个问题,这样它就会返回到主线程池结构。再次感谢。