当前位置:网站首页>Synchronization of QT multithreading
Synchronization of QT multithreading
2022-07-05 08:10:00 【Nanbolwan】
In writing today qt There was a problem in the process of the program . My program theoretically has two threads , But it's not at all . In addition to the main thread, my other thread's main task is to listen to a network port , After receiving the data, send it to the main thread in the form of a signal , Then the main thread processes the corresponding data in the corresponding slot function . At the same time, my main thread also handles many key slot functions , A zero hour dialog window will pop up in the slot function of the key . My problem is when I deal with the pop-up window of the key slot function ( Note that the key slot function has not returned ) The signal sent by the network monitoring thread to the main thread is received on site and enters the corresponding slot function for processing , At this time, the program is stuck . For a professional software engineer , This situation is absolutely not allowed to happen . Based on years of multi-threaded programming experience, I immediately realized the problem ( It is the process described above ). Obviously, this is a typical thread synchronization often encountered in multithreaded programs ( A critical region ) The problem of . Obviously, the code behind the pop-up window is not allowed to be interrupted , We need to protect this part of code as critical area code . So I tried this method , But this method is invalid . So I looked at qt Official documents of , I found the QObject::connect The role of the fifth parameter of the function :
connect(Sender,SIGNAL(signal),Receiver,SLOT(slot),Qt::DirectConnection);
The fifth parameter represents the thread in which the slot function is executed :
1) Auto connect (AutoConnection), Default connection mode , If the signal is connected to the slot , That is, the sender and the receiver are on the same thread , Equivalent to direct connection ; If the sender and receiver are in different threads , Equivalent to a queue connection .
2) Direct connection (DirectConnection), When the signal is transmitted , The slot function immediately calls . No matter which thread the slot function belongs to , Slot functions are always executed on the sender's thread , That is, the slot function and the sender are on the same thread
3) Queue connection (QueuedConnection), When control returns to the event loop of the recipient's thread , The slot function is called . The thread receiver is in the function execution slot , That is, the slot function and the signal receiver are in the same thread
4) Lock queue connection (QueuedConnection)
Qt::BlockingQueuedConnection: The call timing of the slot function is the same as Qt::QueuedConnection Agreement , However, after sending the signal, the sender's thread will block , Until the slot function runs . The receiver and sender must not be in the same thread , Otherwise the program will deadlock . This may be required when synchronization is required between multiple threads .
5) Single connection (UniqueConnection)
Qt::UniqueConnection: This flag It can be done by biting or (|) Used in combination with the above four . When this flag When setting , When a signal is connected to a slot , Repeated connections will fail . That is to avoid repeated connections
therefore , According to the actual application scenario , I used the signal slot function of the network monitoring thread QueuedConnection, Then there is no jam .
边栏推荐
- Why is 1900 not a leap year
- C WinForm [change the position of the form after running] - Practical Exercise 4
- Embedded composition and route
- Fundamentals of C language
- 如何将EasyCVR平台RTSP接入的设备数据迁移到EasyNVR中?
- Drive LED -- GPIO control
- C WinForm [get file path -- traverse folder pictures] - practical exercise 6
- Vofa+ software usage record
- Development tools -- gcc compiler usage
- [trio basic from introduction to mastery tutorial XIV] trio realizes unit axis multi-color code capture
猜你喜欢
UEFI development learning 5 - simple use of protocol
UEFI development learning 2 - running ovmf in QEMU
Embedded composition and route
Semiconductor devices (I) PN junction
C WinForm [change the position of the form after running] - Practical Exercise 4
Shape template matching based on Halcon learning [vi] find_ mirror_ dies. Hdev routine
List of linked lists
Management and use of DokuWiki (supplementary)
Class of color image processing based on Halcon learning_ ndim_ norm. hdev
Measurement fitting based on Halcon learning [III] PM_ measure_ board. Hdev routine
随机推荐
Problem solving: interpreter error: no file or directory
Bluetooth hc-05 pairing process and precautions
Shape template matching based on Halcon learning [viii] PM_ multiple_ models. Hdev routine
Correlation based template matching based on Halcon learning [II] find_ ncc_ model_ defocused_ precision. hdev
How to excavate and research ideas from the paper
Relationship between line voltage and phase voltage, line current and phase current
What are the test items of power battery ul2580
Hardware 1 -- relationship between gain and magnification
Improve lighting C program
Baiwen 7-day smart home learning experience of Internet of things
Shape template matching based on Halcon learning [VII] reuse_ model. Hdev routine
Hardware and software solution of FPGA key chattering elimination
1-stm32 operation environment construction
Shell脚本基本语法
L'étude a révélé que le système de service à la clientèle du commerce électronique transfrontalier a ces cinq fonctions!
C WinForm [change the position of the form after running] - Practical Exercise 4
Live555 push RTSP audio and video stream summary (III) flower screen problem caused by pushing H264 real-time stream
Beijing Winter Olympics opening ceremony display equipment record 3
Summary -st2.0 Hall angle estimation
2021-10-28