Multithreading 在boost线程上调用抽象函数,不会在中断点中断

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

我创建了一个抽象基类,以允许任务的多个实现,可以通过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
        //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中解决了这个问题,这样它就会返回到主线程池结构。再次感谢。