加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

QObject::startTimer: QTimer can only be used with threads&nbs

(2015-01-13 14:24:22)
标签:

it

qt

starttimer

only

qthread

分类: Qt
运行Qt程序时,可能会有这样的打印:
QObject::startTimer: QTimer can only be used with threads started with QThread

网上看了很多种解决方法,但发现都不能解决我的问题,所以本文说的解决方法不一定能解决您的问题,但一定可以解决相同情况的问题。

我的代码是这样的:
class MyThread : public QThread
...

class Command : public QObject
{
public:
    Command()    // 这里书写方法,实现放在类中了
    {
        m_pThread = new MyThread;
        m_pThread->start();
    }
private:
    MyThread *m_pThread;
};

Command* GetCommand()
{
    static Command cmd;
    return &cmd;
}

Command没有使用单例的模式,但为了都能获得全局唯一的实例,定义了GetCommand函数,函数中用static的方法,保证每次调用都返回的是同一个指针。

思路没有问题,编译也正常通过,也可以运行,但关闭程序后就会打印标题中所示的错误。
网上的方法并没有解决我的问题,经过逐行检查后发现是GetCommand函数除了问题,只要把该函数的实现改为:
Command* GetCommand()
{
    static Command *pCmd = new Command;
    return pCmd;
}
这样问题就结局了。

问题解决了,原因是什么呢,这和还有待各位大神指教,但我怀疑static的实例是放在不同线程中的,地址段也不同,造成无法访问或机制上的问题。好了,就到这吧!看到这篇文字的童鞋,希望能解决您的问题!

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有