首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用boost线程上的抽象函数,不中断interruption_point

调用boost线程上的抽象函数,不中断interruption_point
EN

Stack Overflow用户
提问于 2011-09-02 18:08:22
回答 1查看 454关注 0票数 2

我已经创建了一个抽象基类,以允许一个任务的多个实现,这个任务可以通过MFC对话框一般地调用。如果用户单击“取消”,则需要中断此任务。

abstract_dll.h:

代码语言:javascript
复制
class abstract_dll
{
public:
    virtual void my_task(CFeedback *fb)=0;
}

其中CFeedback是一个用于控制用户反馈的抽象类(即。进度条)

concrete_dll.h:

代码语言:javascript
复制
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。上面的代码只是我所拥有的伪代码。我的实际代码编译和运行,我只是不能让它中断。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-11 12:06:57

我认为你的问题的答案是:

http://lists.boost.org/boost-users/2010/01/55171.php

简而言之:您需要链接到项目和DLL中的DLL版本的boost:线程。只需把:

代码语言:javascript
复制
#define BOOST_THREAD_USE_DLL

<boost/thread.hpp>包含之前(或在项目项目中)

BR

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7287550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档