当前位置:网站首页>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 .
边栏推荐
- Tailq of linked list
- How to copy formatted notepad++ text?
- Can't find real-time chat software? Recommend to you what e-commerce enterprises are using!
- Programming knowledge -- basis of C language
- Nb-iot technical summary
- 研究發現,跨境電商客服系統都有這五點功能!
- Communication standard -- communication protocol
- Live555 push RTSP audio and video stream summary (I) cross compilation
- Verilog -- state machine coding method
- Train your dataset with yolov4
猜你喜欢
Measurement fitting based on Halcon learning [i] fuse Hdev routine
Altium designer learning (I)
Working principle and type selection of common mode inductor
Halcon's practice based on shape template matching [1]
生产中影响滑环质量的因素
Management and use of DokuWiki (supplementary)
找不到实时聊天软件?给你推荐电商企业都在用的!
Semiconductor devices (I) PN junction
Carrier period, electrical speed, carrier period variation
Embedded composition and route
随机推荐
1-stm32 operation environment construction
Basic information commands and functions of kernel development
Management and use of DokuWiki (supplementary)
[tutorial 19 of trio basic from introduction to proficiency] detailed introduction of trio as a slave station connecting to the third-party bus (anybus PROFIBUS DP...)
UEFI development learning 3 - create UEFI program
Bluetooth hc-05 pairing process and precautions
Summary of SIM card circuit knowledge
IEEE access personal contribution experience record
UEFI development learning 5 - simple use of protocol
Pointnet++ classification practice
C WinForm [help interface - send email] - practice five
H264 (I) i/p/b frame gop/idr/ and other parameters
C WinForm [view status bar -- statusstrip] - Practice 2
Shape template matching based on Halcon learning [9] PM_ multiple_ dxf_ models. Hdev routine -- [read and write XLD from DXF file]
Measurement fitting based on Halcon learning [II] meaure_ pin. Hdev routine
Classic application of MOS transistor circuit design (1) -iic bidirectional level shift
Soem EtherCAT source code analysis II (list of known configuration information)
General makefile (I) single C language compilation template
Some errors in configuring the environment
2021-10-28