• 1468阅读
  • 1回复

pure virtual method called问题 [复制链接]

上一主题 下一主题
离线apud
 

只看楼主 倒序阅读 楼主  发表于: 2020-06-28
小白请教一个问题按钮多次点击并发调用某个方法(如下:getTextContent),导致pure virtual method called。
原因大概是并发调用操作同一个类成员指针(因需在异步回调中进行deleteLater所以不能是局部申明的,受作用域影响),在某个操作中deleteLater之后,另一次操作又执行了某个虚函数但是指针已经被上一次操作析构了,导致的异常,这种情况要怎么处理呢?
除了限制单个请求还有其它办法吗?最好能支持同时并发调用。多谢!

伪代码如下:
void Form::getTextContent(){
    api = new HttpAPI();
    api->getTextContent([&](bool success, QList<QPair<int,QString>> list){
        //异步回调
        int error = -1;
        QString msg = "";
        if(success){
            QListIterator<QPair<int, QString> > iter(list);
            QPair<int, QString> pair;
            while (iter.hasNext())
            {
                pair = iter.next();
                error = pair.first;
                msg = pair.second;
            }

            if(error==0){
               //执行某些操作
            }
        }
        api->deleteLater();
    });
}
离线XChinux

只看该作者 1楼 发表于: 2020-06-30
是否可以先processEvents(),将待处理消息完毕后,再判断能否进行调用。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个