当前位置:网站首页>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 .
边栏推荐
- Embedded composition and route
- C WinForm [exit application] - practice 3
- Sizeof (function name) =?
- Sql Server的存储过程详解
- Circleq of linked list
- UEFI development learning series
- How to select conductive slip ring
- Bootloader implementation of PIC MCU
- Hardware 1 -- relationship between gain and magnification
- Mlperf training v2.0 list released, with the same GPU configuration, the performance of Baidu PaddlePaddle ranks first in the world
猜你喜欢
![Measurement fitting based on Halcon learning [i] fuse Hdev routine](/img/91/34c92065e797c87d6ce5ea13903993.jpg)
Measurement fitting based on Halcon learning [i] fuse Hdev routine

Summary of SIM card circuit knowledge

UEFI development learning 5 - simple use of protocol

Semiconductor devices (III) FET

Connection mode - bridge and net

Several implementation schemes of anti reverse connection protection of positive and negative poles of power supply!

Network communication process

The firmware of the connected j-link does not support the following memory access

Why is 1900 not a leap year
![Measurement fitting based on Halcon learning [III] PM_ measure_ board. Hdev routine](/img/f9/fc4f0bbce36b3c1368d838d723b027.jpg)
Measurement fitting based on Halcon learning [III] PM_ measure_ board. Hdev routine
随机推荐
DokuWiki deployment notes
FIO测试硬盘性能参数和实例详细总结(附源码)
STM32 tutorial triple ADC interleaved sampling
【论文阅读】2022年最新迁移学习综述笔注(Transferability in Deep Learning: A Survey)
Slist of linked list
Classic application of MOS transistor circuit design (1) -iic bidirectional level shift
[untitled] record the visual shock of the Winter Olympics and the introduction of the display screen
Introduction of air gap, etc
Factors affecting the quality of slip rings in production
Shape template matching based on Halcon learning [9] PM_ multiple_ dxf_ models. Hdev routine -- [read and write XLD from DXF file]
Hardware 3 -- function of voltage follower
Management and use of DokuWiki (supplementary)
Sql Server的存儲過程詳解
Let's briefly talk about the chips commonly used in mobile phones - OVP chips
Talk about the circuit use of TVs tube
VESC Benjamin test motor parameters
Solutions to compilation warnings in Quartus II
Some tips for using source insight (solve the problem of selecting all)
Matlab2018b problem solving when installing embedded coder support package for stmicroelectronic
Communication standard -- communication protocol