线程对象是否可以发射信号(signal)?
是否可以定义槽函数(slot)?
QThread类拥有发射信号和定义槽函数的能力
-关键信号:
·void started
~线程开始运行时发射该信号
·void finished()
~线程完成运行时发射该信号
·void terminated()
~线程被异常终止时发射该信号
如果程序中有多个线程,槽函数是在那个线程中执行的?
概念
-进程中存在栈空间的概念(区别去栈数据结构)
-栈空间专用于函数调用(保存函数参数,局部变量,等)
-线程拥有独立的栈空间(可调用其他函数)
ps:只要函数体没有访问临界资源的代码,同一个函数可以被多个线程同时调用,且不会产生任何无作用!
准备
-操作系统通过整型标识管理进程和线程
·进程拥有全局唯一的ID值(PID)
·线程有进程内唯一的ID值(TID)
-QThread中的关键静态成员函数
·QThread *currentThread()
`Qt::HANDLE currentThreadId()
当槽函数是线程类中的成员时,为什么依然不在本线程内被调用执行?
总结:
-QThread类拥有发射信号和定义槽函数的能力
-线程在进程内拥有一个唯一的ID值
-线程拥有独立的栈空间用于函数调用
-没有临界资源的函数可以无副作用的被多个线程调用
-槽函数的调用在某一个线程中完成