CN103019823A - 实现VxWorks与Qt通信的消息队列方法 - Google Patents

实现VxWorks与Qt通信的消息队列方法 Download PDF

Info

Publication number
CN103019823A
CN103019823A CN2012105346238A CN201210534623A CN103019823A CN 103019823 A CN103019823 A CN 103019823A CN 2012105346238 A CN2012105346238 A CN 2012105346238A CN 201210534623 A CN201210534623 A CN 201210534623A CN 103019823 A CN103019823 A CN 103019823A
Authority
CN
China
Prior art keywords
vxworks
message queue
thread
message
task
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2012105346238A
Other languages
English (en)
Other versions
CN103019823B (zh
Inventor
高宇
刘成芳
丁宝华
顾少华
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Aerospace Measurement Control Communication Institute
Original Assignee
Shanghai Aerospace Measurement Control Communication Institute
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Aerospace Measurement Control Communication Institute filed Critical Shanghai Aerospace Measurement Control Communication Institute
Priority to CN201210534623.8A priority Critical patent/CN103019823B/zh
Publication of CN103019823A publication Critical patent/CN103019823A/zh
Application granted granted Critical
Publication of CN103019823B publication Critical patent/CN103019823B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Communication Control (AREA)
  • Multi Processors (AREA)

Abstract

一种实现VxWorks与Qt通信的消息队列方法,适用于VxWorks与Qt的混合开发,采用以下步骤:S1、在VxWorks任务中声明并创建一消息列队;S2、在Qt主线程中创建若干Qt子线程,并在若干Qt子线程的外部声明消息列队;S3、若干Qt子线程分别同对应的VxWorks任务通过消息列队机制进行通信。利用VxWorks消息队列阻塞接收机制,实现VxWorks任务与Qt子线程的同步,保证消息队列数据在任务或子线程读写时的原子操作,避免任务死锁。

Description

实现VxWorks与Qt通信的消息队列方法
技术领域
本发明涉及嵌入式开发领域,特别涉及一种实现VxWorks与Qt通信的消息队列方法。
 
背景技术
Qt是诺基亚开发的一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。并且Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程;使用Qt开发的软件,相同的代码可以在任何支持的平台上编译与运行,而不需要修改源代码。
VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。VxWorks操作系统由于其良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。
为了结合Qt和VxWorks的优点,目前提出了VxWorks和Qt相结合的开发模式。
然而,Qt用于图形界面处理的线程只能有一个,即主线程QApplication。如果VxWorks直接和Qt主线程通信,有可能导致Qt主线程因阻塞或延迟而无法连贯处理图形界面。为提高处理性能,可以创建Qt子线程专门负责与VxWorks的任务进行数据交换,再通过子线程将处理好的数据转发给Qt主线程。
目前在VxWorks和Qt相结合的开发模式下,多采用信号量配合共享内存的方法实现二者之间的数据交换。但多个VxWorks任务或Qt子线程对同一块共享内存进行读、写操作时,由于任务或子线程之间的不同步,会破坏数据的完整性,导致读、写数据的错误。如果对共享内存数据进行临界区或互斥保护,尽管保证了数据在读、写时的完整性,但会在一定条件下引发任务优先级翻转,甚至出现任务死锁,从而使系统的实时性受到影响。
 
发明内容
本发明针对现有技术存在的上述不足,提供一种实现VxWorks与Qt通信的消息队列方法,利用VxWorks消息队列阻塞接收机制,实现了VxWorks任务与Qt子线程的同步,保证了消息队列数据在任务或子线程读写时的原子操作,避免了任务死锁。
本发明通过以下技术方案实现:
一种实现VxWorks与Qt通信的消息队列方法,适用于VxWorks与Qt的混合开发,采用以下步骤:
S1、在VxWorks任务中声明并创建一消息列队;
S2、在Qt主线程中创建若干Qt子线程,并在若干Qt子线程的外部声明消息列队;
S3、若干Qt子线程分别同对应的VxWorks任务通过消息列队机制进行通信。
较佳的,在步骤S3中,通过消息列队机制进行通信包括:
S1、一第一Qt子线程阻塞接收消息列队,并发送给Qt主线程;
S2、Qt主线程释放一反馈数据至一第二Qt子线程;
S3、第二Qt子线程阻塞接收该反馈数据,并反馈给该消息列队;
S4、VxWorks任务阻塞接收该消息列队。
较佳的,在步骤S1中包括,当消息列队为VxWorks特有数据类型时,需要先在Qt主线程中进行元类型的声明和注册,以使Qt能够识别。
较佳的,在步骤S3中包括,第一Qt子线程接收到的消息列队通过信号/槽机制传输给Qt主线程进行画面显示。
较佳的,在步骤S4中包括,Qt主线程的反馈数据通过信号量类同步传递给该第二Qt子线程进行消息列队的组织。
较佳的,消息列队的数据缓冲区创建于VxWorks任务的上下文中。
本发明的有益效果是,实现了VxWorks任务与Qt子线程的同步,保证了数据交互时读、写的完整。可通过定义多个消息队列对多个任务分别进行通信,避免多个任务对同一块共享内存的竞争,有效避免了任务优先级翻转和任务死锁,保证了系统的实时性。另外,相比共享内存的全局性,消息队列数据缓冲区是在任务的上下文中创建的,它是局部的,有效降低了任务间的耦合度。
 
附图说明
图1为本发明提供的一实施例的主流程图;
图2为本发明中消息队列由VxWorks任务发送到Qt主线程的流程图;
图3为本发明中消息队列由Qt主线程发送到VxWorks任务的流程图;
图4为本发明的主流程时序分析图。
 
具体实施方式
下面结合实施例对本发明作详细说明,本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式,但本发明的保护范围不限于下述的实施例。
本发明采用的技术方案是,创建所需数量的Qt子线程,分别同对应的VxWorks任务通过消息队列机制进行通信。VxWorks任务完成对消息队列的创建及初始化,Qt子线程外部引用该消息队列。任务和子线程根据需要既可作为消息队列的发送者,也可作为其接收者。其中,消息队列的数据类型可以自由定义,但VxWorks特有数据类型需要在Qt主线程中进行元类型METATYPE的声明和注册,从而使Qt能够得以识别。另外,Qt子线程接收到的消息队列可以通过信号/槽机制传递给Qt主线程进行画面显示,Qt主线程的反馈数据也可通过信号量类QSemaphore同步传递给Qt子线程进行消息队列的组织。
请参考图1,本发明提供一较佳实施例加以说明。VxWorks主流程首先初始化了信号量、消息队列、看门狗这三个主要资源,随后启动了看门狗定时器和三个用户级任务。看门狗定时器回调函数通过释放信号量,为网络组播发送任务提供定时周期。网络组播接收任务通过套接字Socket接收到网络报文后,将报文数据发送到消息队列1。数据接收任务阻塞等待来自Qt子线程的消息队列2。VxWorks主流程最后调用Qt入口函数,启动Qt主流程。Qt主流程在进行一系列和图形界面相关的初始化后,创建了两个子线程。子线程1阻塞等待来自网络组播接收任务的消息队列1,并将消息队列通过信号函数的参数发送给Qt主线程的槽函数,主线程即可根据数据信息进行画面显示。子线程2阻塞获取主线程释放的信号量,周期性的将反馈数据发送到消息队列2。通过主流程图,可以看到实施例中用到了四种任务及线程的通信方法。
请参考图2,VxWorks任务发送数据到消息队列。Qt子线程1阻塞接收消息队列,并将该消息队列通过信号发送出去。Qt主线程在创建、启动子线程1并设置信号/槽连接后,槽函数会接收到信号,消息队列是通过信号/槽的函数参数进行传递的。
请参考图3,Qt主线程创建并启动了定时器QTimer和子线程2,同时连接定时器超时信号到主线程槽函数,通过槽函数释放Qt信号量QSemaphore。子线程2阻塞等待来自主线程的Qt同步信号量,获取到该信号量后,子线程2发送反馈数据到消息队列。VxWorks任务阻塞接收该消息队列,并实现对信息的打印。
请参考图4,可以看到主流程产生了6个用户级任务,其中,tmcast_Recv、pthr2、tmcast _Send和pthr1上的方框为消息队列发送、接收,实心三角形信号量发送,空心三角形为信号量接收,虚线为阻塞状态,波浪线为待执行状态,直线条为执行状态。tmcast_Recv是VxWorks网络组播接收任务,tmcast _Send是VxWorks网络组播发送任务、tQt_To_Vx是数据接收任务、pthr1和pthr2是Qt的两个子线程、tQtGui是Qt主线程。tmcast_Recv阻塞等待接收tmcast_Send发出的网络组播报文。收到报文后,tmcast_Recv立即发送报文到消息队列1,pthr1负责接收。另外,pthr2发送报文到消息队列2,tQt_To_Vx负责接收。
以上公开的仅为本申请的一个具体实施例,但本申请并非局限于此,任何本领域的技术人员能思之的变化,都应落在本申请的保护范围内。

Claims (6)

1.一种实现VxWorks与Qt通信的消息队列方法,适用于VxWorks与Qt的混合开发,其特征在于,采用以下步骤:
S1、在VxWorks任务中声明并创建一消息列队;
S2、在Qt主线程中创建若干Qt子线程,并在所述若干Qt子线程的外部声明所述消息列队;
S3、所述若干Qt子线程分别同对应的VxWorks任务通过消息列队机制进行通信。
2.如权利要求1所述的实现VxWorks与Qt通信的消息队列方法,其特征在于,在步骤S3中,所述通过消息列队机制进行通信包括:
S1、一第一Qt子线程阻塞接收所述消息列队,并发送给所述Qt主线程;
S2、所述Qt主线程释放一反馈数据至一第二Qt子线程;
S3、所述第二Qt子线程阻塞接收该反馈数据,并反馈给该消息列队;
S4、VxWorks任务阻塞接收该消息列队。
3.如权利要求1所述的实现VxWorks与Qt通信的消息队列方法,其特征在于,在步骤S1中包括,当所述消息列队为VxWorks特有数据类型时,需要先在Qt主线程中进行元类型的声明和注册,以使Qt能够识别。
4.如权利要求1所述的实现VxWorks与Qt通信的消息队列方法,其特征在于,在步骤S3中包括,第一Qt子线程接收到的消息列队通过信号/槽机制传输给Qt主线程进行画面显示。
5.如权利要求4所述的实现VxWorks与Qt通信的消息队列方法,其特征在于,在步骤S4中包括,Qt主线程的反馈数据通过信号量类同步传递给该第二Qt子线程进行消息列队的组织。
6.如权利要求1所述的实现VxWorks与Qt通信的消息队列方法,其特征在于,所述消息列队的数据缓冲区创建于VxWorks任务的上下文中。
CN201210534623.8A 2012-12-12 2012-12-12 实现VxWorks与Qt通信的消息队列方法 Active CN103019823B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210534623.8A CN103019823B (zh) 2012-12-12 2012-12-12 实现VxWorks与Qt通信的消息队列方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210534623.8A CN103019823B (zh) 2012-12-12 2012-12-12 实现VxWorks与Qt通信的消息队列方法

Publications (2)

Publication Number Publication Date
CN103019823A true CN103019823A (zh) 2013-04-03
CN103019823B CN103019823B (zh) 2016-06-08

Family

ID=47968454

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210534623.8A Active CN103019823B (zh) 2012-12-12 2012-12-12 实现VxWorks与Qt通信的消息队列方法

Country Status (1)

Country Link
CN (1) CN103019823B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106648816A (zh) * 2016-12-09 2017-05-10 武汉斗鱼网络科技有限公司 多线程处理系统及方法
CN107391125A (zh) * 2017-07-03 2017-11-24 中国船舶重工集团公司第七〇九研究所 VxWorks系统下用于人机交互的用户界面设计方案
CN108228360A (zh) * 2016-12-21 2018-06-29 龙芯中科技术有限公司 VxWorks与Qt的事件通信方法和装置
CN110018890A (zh) * 2018-01-10 2019-07-16 武汉斗鱼网络科技有限公司 一种线程间的交互方法、电子设备及可读存储介质
CN110764935A (zh) * 2019-10-28 2020-02-07 天津津航计算技术研究所 一种基于实时操作系统的任务间消息高效传递方法
CN112114982A (zh) * 2020-09-09 2020-12-22 天津津航计算技术研究所 基于VxWorks系统的多任务间共享内存的管理方法
CN114217894A (zh) * 2021-12-10 2022-03-22 中国人民解放军96901部队25分队 一种采用Qt实现雷达屏显的方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101266561A (zh) * 2008-04-29 2008-09-17 中兴通讯股份有限公司 一种在多核多线程处理器中的核间消息通信方法
CN101872317A (zh) * 2010-07-16 2010-10-27 山东中创软件工程股份有限公司 VxWorks多任务同步与通信方法
CN102591726A (zh) * 2011-12-31 2012-07-18 青岛海信宽带多媒体技术有限公司 一种多进程通信方法
CN102591658A (zh) * 2011-12-28 2012-07-18 奇智软件(北京)有限公司 一种消息处理方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101266561A (zh) * 2008-04-29 2008-09-17 中兴通讯股份有限公司 一种在多核多线程处理器中的核间消息通信方法
CN101872317A (zh) * 2010-07-16 2010-10-27 山东中创软件工程股份有限公司 VxWorks多任务同步与通信方法
CN102591658A (zh) * 2011-12-28 2012-07-18 奇智软件(北京)有限公司 一种消息处理方法及装置
CN102591726A (zh) * 2011-12-31 2012-07-18 青岛海信宽带多媒体技术有限公司 一种多进程通信方法

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106648816B (zh) * 2016-12-09 2020-03-17 武汉斗鱼网络科技有限公司 多线程处理系统及方法
CN106648816A (zh) * 2016-12-09 2017-05-10 武汉斗鱼网络科技有限公司 多线程处理系统及方法
CN108228360A (zh) * 2016-12-21 2018-06-29 龙芯中科技术有限公司 VxWorks与Qt的事件通信方法和装置
CN108228360B (zh) * 2016-12-21 2021-03-16 龙芯中科技术股份有限公司 VxWorks与Qt的事件通信方法和装置
CN107391125A (zh) * 2017-07-03 2017-11-24 中国船舶重工集团公司第七〇九研究所 VxWorks系统下用于人机交互的用户界面设计方案
CN110018890A (zh) * 2018-01-10 2019-07-16 武汉斗鱼网络科技有限公司 一种线程间的交互方法、电子设备及可读存储介质
CN110018890B (zh) * 2018-01-10 2021-07-30 武汉斗鱼网络科技有限公司 一种线程间的交互方法、电子设备及可读存储介质
CN110764935B (zh) * 2019-10-28 2023-07-14 天津津航计算技术研究所 一种基于实时操作系统的任务间消息高效传递方法
CN110764935A (zh) * 2019-10-28 2020-02-07 天津津航计算技术研究所 一种基于实时操作系统的任务间消息高效传递方法
CN112114982A (zh) * 2020-09-09 2020-12-22 天津津航计算技术研究所 基于VxWorks系统的多任务间共享内存的管理方法
CN112114982B (zh) * 2020-09-09 2022-03-08 天津津航计算技术研究所 基于VxWorks系统的多任务间共享内存的管理方法
CN114217894A (zh) * 2021-12-10 2022-03-22 中国人民解放军96901部队25分队 一种采用Qt实现雷达屏显的方法
CN114217894B (zh) * 2021-12-10 2023-09-05 中国人民解放军96901部队25分队 一种采用Qt实现雷达屏显的方法

Also Published As

Publication number Publication date
CN103019823B (zh) 2016-06-08

Similar Documents

Publication Publication Date Title
CN103019823A (zh) 实现VxWorks与Qt通信的消息队列方法
CN101365999B (zh) 发送完成事件批处理
EP3234789B1 (en) Apparatus and system for integrating devices in a root complex
CN109933438B (zh) 高速共享内存数据收发系统
US8966488B2 (en) Synchronising groups of threads with dedicated hardware logic
US20060156284A1 (en) Architecture of Ticc-Ppde, a new paradigm for parallel programming
TW200901028A (en) Message queuing system for parallel integrated circuit architecture and related method of operation
CN103729329A (zh) 核间通信装置及方法
CN111694675B (zh) 任务调度方法及装置、存储介质
WO2007112635A1 (fr) Système d'exploitation intégré pour carte à puce et procédé de traitement de tâche
CN104679582A (zh) 对于显示设备的命令调度
CN106844017A (zh) 用于网站服务器处理事件的方法和设备
CN106095604A (zh) 一种多核处理器的核间通信方法及装置
CN105187327A (zh) 一种分布式消息队列中间件
US20040015979A1 (en) System and method for efficiently exchanging data among processes
CN116075815A (zh) 跨接口的批操作
CN102880507A (zh) 一种链式结构消息申请及分发的方法
CN102334104B (zh) 一种基于多核系统的同步处理方法及装置
CN109542832B (zh) 一种无锁机制的异构多核cpu间通信系统及方法
CN108009977B (zh) 多线程环境下支持多个远程图形终端的方法及系统
CN109032818B (zh) 一种同构系统核间同步与通信的方法
CN101349975B (zh) 一种在嵌入式操作系统上实现中断底半部机制的方法及装置
US7929526B2 (en) Direct messaging in distributed memory systems
CN107479891B (zh) 一种基于mvc模型数据处理系统及方法
US10261817B2 (en) System on a chip and method for a controller supported virtual machine monitor

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant