QT线程
QT线程:可用于后台任务、流程控制等。
云中飞鸿--**峰
这个作者很懒,什么都没留下…
展开
-
QTread启动线程方式2-继承QObject,仍然需要 发射信号函数
11。原创 2024-03-15 17:55:24 · 132 阅读 · 0 评论 -
QThread常用相关函数、线程启动方式
但是,线程可能会立即被终止也可能不会,这取决于操作系统的调度策略,使用terminate()之后再使用QThread::wait(),以确保万无一失。线程的起点,在调用start()之后,新创建的线程就会调用这个函数,默认实现调用exec(),大多数需要重新实现这个函数,便于管理自己的线程。该函数返回后,线程便执行结束,就像应用程序离开main()函数一样。使用terminate()函数,线程可能在任何时刻被终止而无法进行一些淸理工作,因此该函数是很危险的,一般不建议使用,只有在绝对必要的时候使用。原创 2024-03-14 15:53:40 · 1014 阅读 · 0 评论 -
线程同步之:QMutex\QMutexLocker
3、QMutexLocker()是另一个简化了互斥量处理的类。在QMutexLocker实例变量的“生命周期”内的代码段 得到保护。QMutexLocker的构造函数接受要给互斥量作为参数 =》构造后,将其“锁定”;所以,在QMutexLocker实例变量的生存期内的代码段,得到保护!QMutexLocker的析构函数 =》析构后,将互斥量“解锁”;2、lock() 与 unlock()必须配对使用。1、基于互斥量的线程同步类QMutex。原创 2024-01-05 14:05:44 · 464 阅读 · 0 评论 -
线程同步之:QReadWriteLock
但只要有一个线程以“写”方式访问资源了,就要等写完再去操作!(如果在“写”的时候“读”,是可以读的,但是读的可能是写之前的内容,也可能是写之后的内容!5、QReadWriteLock的简便形式:QReadLocker\QWriteLocker(无需与unlock()配对使用!每次只能有一个线程获得互斥量的权限。1、 使用互斥量QMutex时候存在一个问题。然而,实际情况是允许:让多个线程同时“读”!这样互斥量 就会降低程序的性能!注意这2个类构造函数参数类型。取某个变量,使用互斥量时。原创 2024-01-05 11:08:26 · 587 阅读 · 0 评论 -
线程同步之:QSemaphore
前面的几种锁都是用来保护“只有一个变量”的互斥量的。可是还有些互斥量(资源)的数量并不止一个,好比一个电脑安装了2个打印机,我已经申请了一个,可是我不能霸占这两个,你来访问的时候若是。一个线程在申请的时候,会对未使用到的部分进行加锁操做,若是加锁失败则阻塞。若是加锁成功,即又有一个资源被使用了,因而则将已使用到的部分解锁一个。以著名的生产者消费者问题为例,分析问题:生产者须要的是空闲位置存放产品,结果是可取的产品多了一个。1、QSemaphore(信号量):针对“资源 >1个”的情况。原创 2023-12-22 17:30:02 · 829 阅读 · 0 评论 -
多线程同步之:QWaitCondition
在主线程中,调用 Send(&packet) 发送后,假如通信线程立即收到回包,在主线程还来不及调用 wait() 的时候,已经先 wakeAll() 了,显然这次唤醒是无效的,但主线程继续调用 wait(),然后一直阻塞在那里,因为该回的包已经回了。由此可见,通过 mutex 把有严格时序要求的代码保护起来,同时把 wakeAll() 也用同一个 mutex 保护起来,这样能保证:一定先有 wait() ,再有 wakeAll(),不管什么情况,都能保证这种先后关系。否则,会丢失第一次掷骰子的数据。原创 2023-12-22 16:39:48 · 1063 阅读 · 0 评论