开发者社区> 问答> 正文

如何停止一个异步线程 - 服务报错

开启一个AsyncTask后,如何将该AsyncTask停止,调用cancel方法无效。求大神,3Q.

展开
收起
montos 2020-06-02 23:25:45 794 0
1 条回答
写回答
取消 提交回答
  • 设置一个变量,在线程中不断检测变量值。######还是没用,不知道是不是我写的有问题,麻烦你写个Demo吧,非常感谢啊######回复 @dashen : 在主线程中定义一个变量,以引用形式传到Task线程中,在主线程中更改该值,在子线程中检测该值。######能不能具体点,我试了好像没用######

    int main()

    {

    bool flag = true;

    boost::thread t(task,ref(true));

    }

    void task(bool &f)

    {

    while(1)

    {

    if(flag==false)

    return;
    

    }

    }

    试试。。。

    ######最好在变量前加 volatile , 防止编译器优化######

    引用来自“talentwang”的答案

    int main()
    
    {
    
    bool flag = true;
    
    boost::thread t(task,ref(true));
    
    }
    
    void task(bool &f)
    
    {
    
      while(1)
    
    {
    
      if(flag==false)
    
        return;
    
    }
    
    }

    试试。。。

    有道理。
    ######非常感谢######

    你thread的属性确定是aynchrounously cancelable么?我怀疑你属性设置的不对。

    ######

    另外,如果是synchronously cancelable属性的thread,也要在可以被cancel的点检查(pthread_testcancel),这样才能退出。

    2020-06-02 23:25:56
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
多IO线程优化版 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载