在QT中添加C++类,头文件引用#include <QThread>类公开,这样写:
class XXXX:public QThread,类里面申明Q_OBJECT,直接写在里面。signals: XXX()这是你的订阅事件名。private:void run()这是run函数;public: int cona=3这是变量,一定要public。
cpp文件里引用头文件,run函数里面写方法:
void XXXX::run()
{
do
{
msleep(cona)
emit connec()
}while(true)
}
上面就是线程类了。现在我们在窗体中应用,先在头文件申明
头文件private: XXXX *thread1XXXX *thread2
构造函数中初始化他们
thread1=new XXXX()
thread1->cona=3
QObject::connect(thread1,SIGNAL(connec()),this,SLOT(XXX信号1()))
thread2=new XXXX()
thread2->cona=4
QObject::connect(thread2,SIGNAL(connec()),this,SLOT(XXX信号2()))
XXX信号1()是读A数据,XXX信号2()读B数据。
按钮1的信号槽里写方法同时进行每3秒读A、没4秒读B
thread1->start()
thread2->start()
要结束谁就用 xxxx->terminate()
看明白没?QT可不同与C++,你不熟悉编程环境,是很难理解的。
Qt上要求界面处理一般需要在主线程中完成。所以最好把次线程中的数据缓冲区放到主线程中:
1、一种方式可以进行数据拷贝,但肯定效率低了。
2、另一种方式是直接将数据缓冲区放到主线程中,然后在主线程中处理读取数据槽。但这样可能主线程压力大,机器配置不能太低。
3、直接在主线程中访问次线程的数据并刷新界面,不过这处理起来复杂(需要手工同步),容易出错。
4、将TableWidget指针传入次线程中,直接在次线程中对其进行 *** 作并发送刷新信号。这种方式未经验证,感觉可能性不大:一方面指针容易走空,另一方面就是前面说的限制在主线程中对接面进行处理。不过所说的“处理”可能并不包括刷新数据吧。
期待楼主进行验证,并展示结果。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)