QT中能不能调用C语言的API。linux下的

QT中能不能调用C语言的API。linux下的,第1张

QT如果是C++版就能够调用C语言的函数,只要你用了相应的库包函。你说调用fork, waitpid, exec, thread_create, socket, connect, accept这些函数不知道每个函数的意思是什么.但是,在QT里这些函数应该在QT里已经都有了的,至少我看到你说的exec,socket,connect,accept这些函数我都用了的,但是不知道你说的fork,waitpid,thread_create是什么函数,thread_create如果是建立线程的话,在QT里创建线程更简单。QT里面很少用到C的基本函数,因为QT的功能本身就比较强大,但是QT不是面向过程的集成开发环境,它是面向对象的,如果你只学了C的话,最好再学学C++吧。只有学了C++才能更好的学,不然你学起来非常痛苦,相反如果学了C++就轻松得多,至少比VC++更轻松。

QT线程是独立的类:

在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++,你不熟悉编程环境,是很难理解的。

QMutex mutexmutex. lock ()global::threadflag = true//将全局变量变为true mutex.unlock()有可能确实是return的太快了,子线程还没来得及去结束,主进程已经return。加sleep试试。加个log看看这个showrelayThread->terminate()这句话...


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8505323.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-17
下一篇 2023-04-17

发表评论

登录后才能评论

评论列表(0条)

保存