当前位置:网站首页>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 .
边栏推荐
- 找不到实时聊天软件?给你推荐电商企业都在用的!
- Stablq of linked list
- The firmware of the connected j-link does not support the following memory access
- IEEE access personal contribution experience record
- Step motor generates S-curve upper computer
- 导电滑环磨损快的原因
- C WinForm [help interface - send email] - practice five
- Imx6ull bare metal development learning 1-assembly lit LED
- UEFI development learning 4 - getting to know variable services
- Solutions to compilation warnings in Quartus II
猜你喜欢
Ble encryption details
UEFI development learning 2 - running ovmf in QEMU
C WinForm [view status bar -- statusstrip] - Practice 2
[trio basic tutorial 16 from introduction to proficiency] UDP communication test supplement
如何进行导电滑环选型
Nb-iot technical summary
Makefile application
LED display equipment records of the opening ceremony of the Beijing Winter Olympics
Shape template matching based on Halcon learning [VII] reuse_ model. Hdev routine
Communication standard -- communication protocol
随机推荐
Simple design description of MIC circuit of ECM mobile phone
How to define guid in AMI code
[tutorial 15 of trio basic from introduction to proficiency] trio free serial communication
Verilog -- state machine coding method
General makefile (I) single C language compilation template
FIO测试硬盘性能参数和实例详细总结(附源码)
Some errors in configuring the environment
Sizeof (function name) =?
C language enhancement -- pointer
Adaptive filter
Programming knowledge -- basis of C language
C WinForm [exit application] - practice 3
Take you to understand the working principle of lithium battery protection board
Drive LED -- GPIO control
Some tips for using source insight (solve the problem of selecting all)
Shell脚本基本语法
Slist of linked list
[paper reading] the latest transfer ability in deep learning: a survey in 2022
Record the torch encountered by win10 cuda. is_ False problem in available()
Wifi-802.11 negotiation rate table