Qt应用开发中线程是经常要用到的,而且是QTimer计时器无法替代的,比如一个接口的数据收发,can、uart、spi等,数据收下来就会启动一个无限循环的线程
pthread_t pthead;
int ret = pthread_create(&pthead, NULL,myThread,this);
if(ret != 0) {
printf("pthread_create failed!\n");
}
如果两个线程,还会设计到对共享内存访问互斥,或者同步等待等操作。
接口收发线程一般会收一堆数据,那么如果一个char一个char或者一个int一个int的传递数据,效率不仅低而且数据量大会出现太多参数,此时最好是用数据指针,经过实践,最好的方式是自定义数据类型,一般是自定义一个struct, 在信号槽signal-slot中传递
信号槽机制是Qt编程核心亮点,可以实现一个信号发出,多个槽函数接收处理。具体步骤如下:
1、自定义结构体
#include <QMetaType> //相关头文件
struct myMessage
{
char data[BUFFER_LEN];
};
Q_DECLARE_METATYPE(myMessage)
2、注册该结构体,一般在main.cpp中就完成注册,让moc可以用于在信号-槽间进行传递,(不注册信号中数据传不出)
qRegisterMetaType<myMessage>("myMessage");//注