CN116466996B - 基于多线程的通信方法及上位机 - Google Patents

基于多线程的通信方法及上位机 Download PDF

Info

Publication number
CN116466996B
CN116466996B CN202310453152.6A CN202310453152A CN116466996B CN 116466996 B CN116466996 B CN 116466996B CN 202310453152 A CN202310453152 A CN 202310453152A CN 116466996 B CN116466996 B CN 116466996B
Authority
CN
China
Prior art keywords
instruction
data
thread
queue
empty
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.)
Active
Application number
CN202310453152.6A
Other languages
English (en)
Other versions
CN116466996A (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.)
Huizhou Leyitong Technology Co Ltd
Original Assignee
Huizhou Leyitong Technology Co Ltd
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 Huizhou Leyitong Technology Co Ltd filed Critical Huizhou Leyitong Technology Co Ltd
Priority to CN202310453152.6A priority Critical patent/CN116466996B/zh
Publication of CN116466996A publication Critical patent/CN116466996A/zh
Application granted granted Critical
Publication of CN116466996B publication Critical patent/CN116466996B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Communication Control (AREA)

Abstract

本申请适用于数据通信技术领域,提供了一种基于多线程的通信方法、通信装置及上位机。其中,通信方法包括:基于第一线程发送指令队列中的第一指令,并将第一指令存储于目标队列中;基于第二线程接收第一数据,并确定第一数据是否与目标队列中的第一指令匹配;若第一数据与目标队列中的第一指令匹配,则基于第二线程删除目标队列中的第一指令;在确定目标队列中的指令为空之后,基于第一线程发送指令队列中的第二指令。本方案通过不同的线程进行收发可以提高接收第一数据的速度,提升指令的收发效率,从而可以有效的解决连续收发场景下容易出现卡顿的问题。

Description

基于多线程的通信方法及上位机
技术领域
本申请属于数据通信技术领域,尤其涉及一种基于多线程的通信方法及上位机。
背景技术
通常情况下,上位机通过一个线程在向下位机发送指令,并通过该线程接收来自下位机的指令,该线程需要每间隔一段时间去检测有没有来自下位机的数据,若该线程刚检测过没有来自下位机的数据之后,下位机的数据到达,则需要再等待一段时间才能被该线程检测到,因此会导致数据卡顿的问题。
发明内容
本申请实施例提供了一种基于多线程的通信方法及上位机,以解决串口通信连续收发指令时,出现的卡顿的问题。
第一方面,本申请实施例提供了一种基于多线程的通信方法,应用于上位机,包括:
基于第一线程发送指令队列中的第一指令,并将所述第一指令存储于目标队列中;
基于第二线程接收第一数据,并确定所述第一数据是否与所述目标队列中的所述第一指令匹配;
若所述第一数据与所述目标队列中的所述第一指令匹配,则基于所述第二线程删除所述目标队列中的所述第一指令;
在确定所述目标队列中的指令为空之后,基于所述第一线程发送所述指令队列中的第二指令;
其中,所述第一线程与所述第二线程不同。
也就是说,第一线程在发送指令时,将对应的指令存储在目标队列中,并根据目标队列中的指令是否为空来确定是否接收到与已发送指令对应的数据。第二线程可以通过目标队列中的指令来确定当前已发送的指令,以与接收到的第一数据进行匹配,并在匹配成功时,将目标队列中的指令删除。
根据本申请实施例的基于多线程的通信方法,由第一线程对指令队列中的指令进行发送,由第二线程对第一数据进行接收,通过不同的线程进行收发可以提高接收第一数据的速度,从而可以解决卡顿问题,其中,第一线程与第二线程通过目标队列中存储的指令进行关联,可以有效的提升在连续收发场景下的收发效率,以解决卡顿的问题。
在本申请的一些实施例中,在所述基于第一线程发送指令队列中的第一指令之前,还包括:
基于所述第一线程检测所述指令队列中的指令是否为空;
若所述指令队列中的指令为空,则基于所述第一线程休眠第一预设时间段后,继续检测所述指令队列中的指令是否为空;
其中,所述基于第一线程发送指令队列中的第一指令,包括:
若所述指令队列中的指令为非空,则基于所述第一线程从所述指令队列中取出所述第一指令,并发送所述第一指令。
作为一种可能的实现方式,所述指令队列包括阻塞型队列和非阻塞型队列;所述若所述指令队列中的指令为非空,则基于所述第一线程从所述指令队列中取出所述第一指令,包括:
若所述阻塞队列中的指令为非空,则基于所述第一线程从所述阻塞队列中取出所述第一指令;或者,
若所述阻塞队列中的指令为空且所述非阻塞队列的指令为非空,则基于所述第一线程从所述非阻塞队列中取出所述第一指令。
示例性的,该方法还可以包括:
基于第三线程在每次接收到用户指令时,确定所述用户指令的类型;
若所述用户指令的类型为阻塞型,基于所述第三线程将所述用户指令放入所述阻塞队列中;或者,
若所述用户指令的类型为非阻塞型,基于所述第三线程将所述用户指令放入所述非阻塞队列中。
应理解,用户指令可以通过对应的标识信息来指示用户指令为阻塞型或非阻塞型。其中,阻塞型指令是指执行时需要遵循一定顺序的指令,非阻塞型指令是指没有执行顺序要求的指令。作为一种示例,软件功能升级的指令为阻塞型指令,获取设备状态数据的指令为非阻塞型指令。
在本申请的一些实施例中,在所述基于所述第一线程确定所述目标队列中的指令为空之后,基于所述第一线程发送所述指令队列中的第二指令之前,还包括:
基于所述第一线程每间隔第二预设时间段检测一次所述目标队列中的指令是否为非空;
若连续N次检测所述目标队列中的指令为非空,则基于所述第一线程删除所述目标队列的所述第一指令,N为大于预设值的正整数;
在基于所述第一线程删除所述目标队列的所述第一指令之后,确定所述目标队列中的指令为空。
也就是说,若目标队列中的指令连续多次检测一直为非空,则说明第二线程一直未接收到与目标队列中的指令匹配的数据,为了保证后续指令的发出,可以基于第一线程将目标队列中的第一指令删除,来发送指令队列中的第二指令,以保证指令收发的正常进行。
作为一种可能的实现方式,在所述基于所述第一线程删除所述目标队列的所述第一指令之后,还包括:
基于所述第一线程以预设方式显示用于指示指令超时的提醒。
在本申请的一些实施例中,所述基于第二线程接收第一数据,包括:
基于所述第二线程接收至少一个第二数据,并将所述至少一个第二数据存储在数据列表中;
在所述数据列表中的数据长度大于预设长度阈值时,对数据列表中的数据进行拷贝;
确定拷贝的数据列表中的数据是否为完整帧数据;
若拷贝的数据列表中的数据为完整帧数据,则确定拷贝的数据列表中的数据为所述第一数据,并且删除数据列表中被拷贝的数据。
通过将接收到的数据存储至数据列表中,来对接收到的数据进行完整性校验和匹配性校验,可以避免出现帧数据错读的问题,也可以避免由于数据帧错读出现的数据丢失的问题。
在本申请的另一些实施例中,该方法还包括:
若所述拷贝的数据列表中的数据为非完整帧数据,基于所述第二线程将所述拷贝的数据删除;
基于所述第二线程接收至少一个第三数据,并将所述至少一个第三数据存储在数据列表中;
对数据列表中的数据进行拷贝;
确定拷贝的数据列表中的数据是否为完整帧数据;
若拷贝的数据列表中的数据为完整帧数据,则确定拷贝的数据列表中的数据为所述第一数据,并且删除数据列表中被拷贝的数据。
在本申请的又一些实施例中,该方法还可以包括:
若所述第一数据未与所述目标队列中的所述第一指令匹配,基于第二线程将所述第一数据丢弃。
第二方面,本申请提供了一种基于多线程的通信装置,该装置应用于上位机,包括:
发送模块,用于基于第一线程发送指令队列中的第一指令,并将所述第一指令存储于目标队列中;
接收模块,用于基于第二线程接收第一数据,并确定所述第一数据是否与所述目标队列中的所述第一指令匹配;
指令删除模块,用于若所述第一数据与所述目标队列中的所述第一指令匹配,则基于所述第二线程删除所述目标队列中的所述第一指令;
所述发送模块,还用于在确定所述目标队列中的指令为空之后,基于所述第一线程发送所述指令队列中的第二指令;
其中,所述第一线程与所述第二线程不同。
在本申请的一些实施例中,所述发送模块还用于:
在所述基于第一线程发送指令队列中的第一指令之前,基于所述第一线程检测所述指令队列中的指令是否为空;
若所述指令队列中的指令为空,则基于所述第一线程休眠第一预设时间段后,继续检测所述指令队列中的指令是否为空;
在本申请的一些实施例中,发送模块还用于:
若所述指令队列中的指令为非空,则基于所述第一线程从所述指令队列中取出所述第一指令,并发送所述第一指令。
作为一种可能的实现方式,指令队列未阻塞队列或者非阻塞队列;发送模块还用于:
若所述阻塞队列中的指令为非空,则基于所述第一线程从所述阻塞队列中取出所述第一指令;或者,
若所述阻塞队列中的指令为空且所述非阻塞队列的指令为非空,则基于所述第一线程从所述非阻塞队列中取出所述第一指令。
示例性的,该通信装置还可以包括指令存储模块,该指令存储模块用于:
基于第三线程在每次接收到用户指令时,确定所述用户指令的类型;
若所述用户指令的类型为阻塞型,基于所述第三线程将所述用户指令放入所述阻塞队列中;或者,
若所述用户指令的类型为非阻塞型,基于所述第三线程将所述用户指令放入所述非阻塞队列中。
作为一种可能的实现方式,发送模块还用于:
在所述基于所述第一线程确定所述目标队列中的指令为空之后,基于所述第一线程发送所述指令队列中的第二指令之前,基于所述第一线程每间隔第二预设时间段检测一次所述目标队列中的指令是否为非空;
若连续N次检测所述目标队列中的指令为非空,则基于所述第一线程删除所述目标队列的所述第一指令,N为大于预设值的正整数;
在基于所述第一线程删除所述目标队列的所述第一指令之后,确定所述目标队列中的指令为空。
示例性的,发送模块还用于:
在所述基于所述第一线程删除所述目标队列的所述第一指令之后,基于所述第一线程以预设方式显示用于指示指令超时的提醒。
作为一种可能的实现方式,接收模块具体用于:
基于所述第二线程接收至少一个第二数据,并将所述至少一个第二数据存储在数据列表中;
在所述数据列表中的数据长度大于预设长度阈值时,对数据列表中的数据进行拷贝;
确定拷贝的数据列表中的数据是否为完整帧数据;
若拷贝的数据列表中的数据为完整帧数据,则确定拷贝的数据列表中的数据为所述第一数据,并且删除数据列表中被拷贝的数据。
作为另一种可能的实现方式,接收模块还用于:
若所述拷贝的数据列表中的数据为非完整帧数据,基于所述第二线程将所述拷贝的数据删除;
基于所述第二线程接收至少一个第三数据,并将所述至少一个第三数据存储在数据列表中;
对数据列表中的数据进行拷贝;
确定拷贝的数据列表中的数据是否为完整帧数据;
若拷贝的数据列表中的数据为完整帧数据,则确定拷贝的数据列表中的数据为所述第一数据,并且删除数据列表中被拷贝的数据。
作为又一种可能的实现方式,接收模块还用于:
若所述第一数据未与所述目标队列中的所述第一指令匹配,基于所述第二线程将所述第一数据丢弃。
第三方面,本申请实施例提供了一种上位机,包括:存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现第一方面所述的通信方法
第四方面,本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现上述第一方面所述的通信方法。
第五方面,本申请实施例提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行上述第一方面所述的通信方法。
可以理解的是,上述第二方面至第五方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。
本申请实施例与现有技术相比存在的有益效果是:
在本申请实施例中,上位机基于第一线程发送指令队列中的第一指令,并将第一指令存储在目标队列中,基于第二线程接收第一数据,并确定第一数据是否与目标队列中的第一指令匹配,若第一数据与目标队列中的第一指令匹配,则基于第二线程删除队列中的第一指令,在确定目标队列中的指令为空之后,基于第一线程发送指令队列中的第二指令。本方案通过不同的线程进行收发可以提高接收第一数据的速度,并通过目标队列中的指令将收发过程进行关联,以提升指令的收发效率,从而可以有效的解决连续收发场景下容易出现卡顿的问题。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一实施例提供的一种基于多线程的通信方法的流程示意图;
图2是本申请一实施例提供的另一种基于多线程的通信方法的流程示意图;
图3是本申请一实施例中基于第二线程接收第一数据的流程示意图;
图4是本申请一实施例提供的一种基于多线程的通信装置的结构示意图;
图5是本申请一实施例提供的一种上位机的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
应当理解,当在本申请说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本申请说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。另外,在本申请说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。在本申请说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
需要说明的是,串口是计算机上一种非常通用的设备通信协议,串口通信是指外设与计算机间,通过数据信号线、地线、控制线等,按位传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本。串口通信在工程应用中很常见,上位机与下位机通讯过程中常通过有线的串口进行通信,在低速传输模式下串口通信得到广泛使用。通常硬件数据显示都需要借助串口调试工具,但是在上位机与下位机串口通信的场景中,若上位机进行连续收发指令,容易出现卡顿的问题。为了解决上述问题,本申请实施例提出了一种基于多线程的通信方法、通信装置及上位机。本申请实施例提供的基于多线程的通信方法可以应用于上位机,可以用于上位机与下位机串口通信时上位机收发指令的场景中。上位机用来给下位机发送指令控制下位机,同时上位机也接收下位机反馈的数据。通常,上位机是可以直接发送操作指令的计算机,一般可以提供用户操作界面并向用户展示反馈数据。下位机是指直接与机器连接的计算机或单片机,一般用于接收和反馈上位机的指令,并且根据指令控制机器执行动作以及从机器传感器读取数据。其中,上位机和下位机可以通过串口通信。
作为示例而非限定,本申请实施例中的上位机可以为台式机、平板电脑、增强现实(augmented reality,AR)/虚拟现实(virtual reality,VR)设备、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本、个人数字助理(personaldigital assistant,PDA)等可以实现串口通信的终端设备,本申请实施例对上位机的具体类型不作任何限制。
需要说明的是,本申请实施例所提供的一种基于多线程的通信方法可以应用于本申请实施例中的基于多线程的通信装置,且本申请实施例中的基于多线程的通信装置可以配置于上位机中。
图1为本申请实施例所提供的一种基于多线程的通信方法的流程图,作为示例而非限定,如图1所示,该方法包括以下步骤:
步骤S101,基于第一线程发送指令队列中的第一指令,并将第一指令存储于目标队列中。
其中,指令队列是用户存储用户指令的队列,在接收到用户发出的用户指令后,将用户指令存储在指令队列中。第一指令可以为按照先进先出的顺序从指令队列中取出的一条指令。目标队列为第一线程和第二线程均可以读写的队列,用于存放当前发送的指令,且目标队列中最多会存放一条指令。
作为一种示例,在基于第一线程发送指令队列中的第一指令时,可以先基于第一线程从指令队列中取出第一指令,即按照先进先出的顺序从指令队列中取出一条指令;基于预设的通信协议,生成第一指令对应的指令数据;将第一指令对应的指令数据发送至串口。
在本申请的一些实施例中,在基于第一线程发送指令队列中的第一指令之前,还可以包括:基于第一线程检测指令队列中的指令是否为空;若指令队列中的指令为空,则基于第一线程休眠第一预设时间段后,继续检测指令队列中的指令是否为空;其中,基于第一线程发送指令队列中的第一指令包括:若指令队列中的指令为非空,则基于第一线程从指令队列中取出第一指令,并发送第一指令。
结合步骤S102和步骤S103,目标队列用于存放当前发送的指令,并在接收到与目标队列中的指令匹配的第一数据时,将目标队列中的指令删除,所以目标队列中的指令可以指示是否已经接收到与当前发送的指令对应的数据。若目标队列中的指令为空,则说明已接收到由串口返回的与当前发送的指令所对应的数据,否则,说明还未接收到串口返回的数据。
应理解,基于第一线程发送指令时需要时上一条指令所对应的数据已返回,所以发送指令队列中的第一指令之前,还需要确定目标队列中的指令是否为空。若目标队列中的指令为空,则继续确定指令队列中的指令是否为空。若指令队列的指令为非空,则执行基于第一线程发送指令队列中的第一指令的步骤,否则休眠第一预设时间段后继续判断指令队列中的指令是否为空。若目标队列中的指令为非空,则说明还未接收到与上一条指令所匹配的第一数据,可以等待第二预设时间段之后继续确定目标队列中的指令是否为空。
步骤S102,基于第二线程接收第一数据,并确定第一数据是否与目标队列中的第一指令匹配。
其中,第一数据可以为基于第二线程所接收到的完整的一帧数据。确定第一数据是否与目标队列中的第一指令匹配是指,确定第一数据是否为与第一指令所对应的返回数据。需要说明的是,确定第一数据是否与目标队列中的第一指令匹配可以通过相关技术中的校验数据与指令是否对应的方法来实现,本申请对其不作限定。
在本申请的一些实施例中,可以基于第二线程持续接收串口返回的数据,并将每次接收的数据从缓存里取出,基于通信协议来判断已取出的数据是否为完整的一帧数据;若已取出的数据为完整的一帧数据,则已取出的数据为第一数据,再确定第一数据是否与目标队列中的第一指令匹配。若已取出的数据为非完整的一帧数据,等待接收到串口返回的数据后,再将数据取出进行判断。
在本申请的另一些实施例中,可以基于第二线程接收至少一条第二数据,该第二数据是指每次接收到的一个数据片段;将接收到的至少一个第二数据存储在数据列表中;可以设定长度阈值,该长度阈值可以为小于或者等于第一指令对应的完整帧数据最小长度的值,若数据列表的数据长度大于预设的长度阈值,则拷贝数据列表中的数据;确定拷贝的数据列表中的数据是否为完整帧数据;若拷贝的数据列表中的数据为完整帧数据,则确定拷贝的数据列表中的数据为第一数据,并且删除数据列表中被拷贝的数据。
作为一种示例,确定第一数据是否与目标队列中的第一指令匹配,可以基于通信协议来实现,比如下位机返回的帧数据中可以携带对应的指令标识信息,通过比对第一数据中包含的指令标识信息与第一指令进行比对,来确定第一指令是否与目标队列中的第一指令匹配。
需要说明的是,通常情况下,第一数据可以为基于第二线程所接收到的完整的一帧数据,但是异常情况下,第一数据还可以为基于第二线程所接收到的包含完整的一帧数据和非完整帧数据的数据。也就是说,第一数据中可以仅仅包括完整的一帧数据,也可以包括除完整的一帧数据之外的非完整的帧数据,第一数据中只要包含完整的一帧数据即可。例如,在正常情况下,第一数据可以为下位机基于第一指令所发送的完整的一帧数据。若下位机在发送上一条指令所对应的数据过程中出现了中断,第一数据有可能包含下位机基于第一指令所发送的完整的一帧数据,还有可能包含下位机基于中断前的指令所发送的非完整的帧数据。
步骤S103,若第一数据与目标队列中的第一指令匹配,则基于第二线程删除目标队列中的第一指令。
由于第一数据可以是完整的一帧数据,也可以包括除完整的一帧数据之外非完整帧数据,所以第一数据与目标队列中的第一指令匹配是指第一数据中的完整的一帧数据与第一指令匹配。第一数据与目标队列中的第一指令匹配,相当于已经接收到与第一指令对应串口返回数据,所以可以基于第二线程删除目标队列中的第一指令。
需要说明的是,若第一数据只包含与目标队列中的第一指令匹配的完整帧数据,则可以将第一数据以预设的方式进行展示。若第一数据中除了包含与目标队列中的第一指令匹配的完整帧数据外,还包含未与目标队列中的第一指令匹配的非完整帧数据,则将第一数据中的完整帧数据以预设的方式进行展示,而将第一数据中剩余的其他数据丢弃。
此外,第一数据未与目标队列中的第一指令匹配,是指第一数据中的所有数据均不能与目标队列中的第一指令匹配,这种情况下可以直接基于第二线程将第一数据丢弃。
步骤S104,在确定目标队列中的指令为空之后,基于第一线程发送指令队列中的第二指令;其中,第一线程与第二线程不同。
可以理解,步骤S101和步骤S104均基于第一线程来实现,所以可以在步骤S101完成后继续执行步骤S104。
也就是说,在确定目标队列中的指令为空之后,基于第一线程继续发送指令队列中的指令,并将发送的指令存储在目标队列中。其中,第二指令是指基于第一线程按照先进先出的原则从指令队列中取出的指令。基于第二线程持续接收数据的接收,若已接收到与第二指令匹配的第一数据,则将目标队列中的第二指令删除,如此循环执行。
其中,确定目标队列中的指令是否为空,可以基于第一线程来读取目标队列中的指令来实现。
根据本申请实施例的技术方案,上位机基于第一线程发送指令队列中的第一指令,并将第一指令存储在目标队列中,基于第二线程接收第一数据,并确定第一数据是否与目标队列中的第一指令匹配,若第一数据与目标队列中的第一指令匹配,则基于第二线程删除队列中的第一指令,在确定目标队列中的指令为空之后,基于第一线程发送指令队列中的第二指令。本方案通过第一线程和第二线程来实现指令数据的收发,并通过目标队列中的指令将指令数据的收发过程进行关联,以提升指令的收发效率,从而可以有效的解决连续收发场景下容易出现卡顿的问题。
应理解,用户指令可以通过对应的标识信息来指示用户指令为阻塞型或非阻塞型。其中,阻塞型指令是指执行时需要遵循一定顺序的指令,非阻塞型指令是指没有执行顺序要求的指令。作为一种示例,软件功能升级的指令为阻塞型指令,获取设备状态数据的指令为非阻塞型指令。
在本申请的一些实施例中,在执行图1中的步骤S101之前,可以包括基于第一线程检测指令队列中的指令是否为空,则步骤S101中基于第一线程发送指令队列中的第一指令的步骤可以包括:若指令队列中的指令为非空,则基于第一线程从指令队列中取出第一指令,并发送第一指令。若指令队列为阻塞队列或者非阻塞队列,其中,若指令队列中的指令为非空,则基于第一线程从指令队列中取出第一指令的实现方式可以包括:若阻塞队列中的指令为非空,则基于第一线程从阻塞队列中取出第一指令;或者,若阻塞队列中的指令为空且非阻塞队列的指令为非空,则基于第一线程从非阻塞队列中取出第一指令。
这样,在发送指令时可以优先发送阻塞型指令,可以避免阻塞型指令的执行异常的情况发生,从而可以保证指令收发过程的正常进行,以提升指令收发效率。
作为一种可能的实现方式,本申请实施例所提供的一种基于多线程的通信方法还可以包括:基于第三线程在每次接收到用户指令时,确定用户指令的类型;若用户指令的类型为阻塞型,基于第三线程将用户指令放入阻塞队列中;或者,若用户指令的类型为非阻塞型,基于第三线程将用户指令放入非阻塞队列中。其中,第三线程与第一线程和第二线程均不同。
若目标队列中的指令总是为非空,则说明还未接收到与目标队列中的指令匹配的第一数据,这种情况下,第一线程无法继续发送指令队列中的第二指令,从而影响后续指令的发送。针对这个问题,本申请提出了又一个实施例。
图2为本申请实施例所提供的另一种基于多线程的通信方法的流程图,作为示例而非限定,如图2所示,该方法包括以下步骤:
步骤S201,基于第一线程发送指令队列中的第一指令,并将第一指令存储于目标队列中。
步骤S202,基于第二线程接收第一数据,并确定第一数据是否与目标队列中的第一指令匹配。
步骤S203,若第一数据与目标队列中的第一指令匹配,则基于第二线程删除目标队列中的第一指令。
步骤S204,在确定目标队列中的指令为空之后,基于第一线程发送指令队列中的第二指令;其中,第一线程与第二线程不同。
步骤S205,基于第一线程每间隔第二预设时间段检测一次目标队列中的指令是否为非空。
也就是说,在执行步骤S204之前,还可以先执行步骤S205以检测目标队列中的指令是否为空。若目标队列中的指令为空,则说明目标队列中的指令已经在执行步骤S203时由第二线程删除,所以继续执行步骤S204,否则间隔第二预设时间段后再次检测目标队列中的指令是否为空。由于步骤S205、步骤S201都是基于第一线程来完成,所以可以是步骤S201执行完毕后,执行步骤S205。
需要说明的是,每间隔第二预设时间段是指从发送第一指令后,每间隔第二预设时间段检测一次目标队列中的指令是否为空,以确定与第一指令对应的数据是否已接收到,从而可以确定是否继续发送后续指令。
步骤S206,若连续N次检测目标队列中的指令为非空,则基于第一线程删除目标队列的第一指令,N为大于预设值的正整数。
也就是说,若连续N次检测目标队列中的指令为非空,则说明与第一指令对应的数据还一直未接收到,所以未执行步骤S203。若目标队列中的指令一直为非空,则无法继续发送后续指令。所以在这种情况下,可以设定目标队列中的指令连续为非空的次数的预设值,若连续N次检测目标队列中的指令为非空,且N大于预设值,则可以基于第一线程删除目标队列的第一指令。
若连续M次检测目标队列中的指令为非空,其中,M为小于预设值的整数,即第M次检测目标队列中的指令为空,相当于可以确定目标队列中的指令为空,则可以继续执行步骤S204。
作为一种示例,可以基于第一线程在发送第一指令之后,每隔预设时间段检测目标队列中的指令是否为空,并通过计数器计数;若目标队列中的指令为空,则计数器清空;若目标队列中的指令为非空,则计数器加1,并将计数器中的数值与预设值进行比对,若计数器中的数值N大于预设值,则基于第一线程删除目标队列中的第一指令。
需要说明的是,步骤S203和步骤S206并非同时执行,若第二线程接收到与第一指令匹配的第一数据,则执行步骤203基于第二线程将目标队列中的第一指令删除。若第二线程一直未接收到第一数据,基于第一线程连续N次检测目标队列中的指令均为非空,则说明步骤203未执行,可以执行步骤S206由第一线程将目标队列中的第一指令删除,以避免长时间的等待,保证后续指令的顺利发出。
步骤S207,在基于第一线程删除目标队列的第一指令之后,确定目标队列中的指令为空。
在本申请的一些实施例中,该方法在基于第一线程删除目标队列的第一指令之后,还可以包括基于第一线程以预设方式显示用于指示指令超时的提醒,以通知用户第一指令数据返回超时。
需要说明的是,图2中的步骤S201-步骤S204与图1中的步骤S101-步骤S104的实现方式一致,此处不再赘述。
根据本申请实施例的技术方案,增加基于第一线程每间隔第二预设时间段检测一次目标队列中的指令是否为非空的步骤,若目标队列中的指令为空基于第一线程发送指令队列中的第二指令,若连续N次检测目标队列中的指令为非空,且N大于预设值,则认为第一指令已超时,基于第一线程删除目标队列的第一指令。这样,不仅可以在节省资源的前提下监控目标队列中指令的状态,以保证及时发送指令队列中的指令,也可以避免超时等待,保证后续指令的顺利发出,从而可以进一步避免连续收发场景下的卡顿问题。
为了解决连续收发场景下的帧数据错读及数据丢失的问题,本申请提出了又一个实施例。
图3为本申请实施例中的基于第二线程接收第一数据的流程图,作为示例而非限定,如图3所示,图1中的步骤S102中基于第二线程接收第一数据的过程可以包括以下步骤:
步骤S301,基于第二线程接收至少一个第二数据,并将至少一个第二数据存储在数据列表中。
在本申请实施例中,第二数据是指第二线程接收的由串口返回的数据片段,即组成第一数据的数据片段。可以为数据传输过程中,每次返回的数据片段。也就是说,第二线程持续接收第二数据,并将接收到的至少一个第二数据存储在数据列表中。比如,可以为基于第二线程每次接收到一个第二数据,均将其存储在数据列表中。
步骤S302,在数据列表中的数据长度大于预设长度阈值时,对数据列表中的数据进行拷贝。
其中,预设长度阈值可以为小于或者等于指令对应的返回数据的最小长度的任意值。应理解,在数据列表中的数据长度大于预设长度阈值时,对数据列表中的数据进行拷贝,以确定拷贝的数据列表中数据是否为完整帧数据,而不用每次接收到第二数据后均进行拷贝及判断,可以减少无效的拷贝和判断的次数,从而可以有效的减少资源的浪费。
需要说明的是,对数据列表中的数据进行拷贝是指拷贝当前数据列表中的所有数据。
步骤S303,确定拷贝的数据列表中的数据是否为完整帧数据。
在本申请的一些实施例中,可以基于通信协议来确定拷贝的数据列表中的数据是否为完整的一帧数据。作为一种示例而非限定,若通信协议中规定的完整帧数据的格式为帧头、控制码、功能码、长度、校验码和帧尾,则可以将拷贝的数据列表中的数据与规定的格式进行比对,来确定拷贝的数据列表中的数据是否为完整帧数据。在本申请实施例中,确定拷贝的数据列表中的数据是否为完整帧数据可以通过相关技术中的校验完整帧的方式来实现,本申请对此不作限定。
步骤S304,若拷贝的数据列表中的数据为完整帧数据,则确定拷贝的数据列表中的数据为第一数据,并且删除数据列表中被拷贝的数据。
其中,删除数据列表中被拷贝的数据是指将步骤S302中拷贝的数据从数据列表中删除,相当于从数据列表中取出来完整的一帧数据。
在本申请的一些实施例中,本申请实施例中基于第二线程接收第一数据的过程还可以包括:
步骤S305,若拷贝的数据列表中的数据为非完整帧数据,基于第二线程将拷贝的数据删除。
应理解,若步骤S302中拷贝的数据非完整的一帧数据,说明执行步骤S302时基于第二线程接收到的至少一个第二数据非完整的一帧数据,这种情况下可以直接基于第二线程将拷贝处理的数据删除。需要说明的是,此处基于第二线程删除的拷贝的数据并非数据列表中的数据,而是基于数据列表拷贝出来的数据。
也就是说,执行完步骤S308之后,若拷贝的数据依然非完整帧数据,则可以返回继续执行步骤S305,直至得到完整帧数据为止。
步骤S306,基于第二线程接收至少一个第三数据,并将至少一个第三数据存储在数据列表中。
此处的第三数据是指上一次拷贝数据列表之后第二线程所接收到的数据片段,第三数据与第二数据均是指每次接收到的数据片段。
步骤S307,对数据列表中的数据进行拷贝。
需要说明的是,对数据列表中的数据进行拷贝是拷贝当前数据列表中的所有数据。应理解,由于第二线程一种在接收数据,所以步骤S307中拷贝的数据长度大于步骤S302中拷贝的数据长度,这样反复的对数据列表中的数据进行拷贝来再次判断是否已接收到了完整的一帧数据。
步骤S308,确定拷贝的数据列表中的数据是否为完整帧数据。
需要说明的是,可能会出现数据返回异常的情况,基于第二线程接收到的数据有可能包括当前发送的指令对应的数据,还有可能包括历史发送的超时或者中断的指令对应的数据,所以步骤S308中确定拷贝的数据列表中的数据是否为完整帧数据实际上为确定拷贝的数据列表中的数据是否包含完整帧数据。
例如,下位机出现异常中断,造成上一条发送的指令出现超时,基于第一线程将目标队列中的指令删除,并基于第一线程发送指令队列中的下一条指令;基于第二线程接收到的数据有可能只包括当前发送指令对应的数据,还有可能包括中断前已返回的部分上一条指令对应的数据;若第二线程接收到的数据既包括当前发送指令对应的数据,还包括中断前已返回的部分上一条指令对应的数据时,在当前发送指令的数据都返回后,拷贝的数据列表的数据中除了包含当前发送指令对应的完整帧数据还包括部分中断前的返回数据。在确定拷贝的数据列表中的数据是否为完整帧数据时,若拷贝的数据列表中的数据包含完整帧数据,则确定拷贝的数据列表中的数据为完整帧数据。
步骤S309,若拷贝的数据列表中的数据为完整帧数据,则确定拷贝的数据列表中的数据为第一数据,并且删除数据列表中被拷贝的数据。
其中,删除数据列表中被拷贝的数据是指将步骤S307中拷贝的数据从数据列表中删除,相当于从数据列表中取出来完整帧数据。
根据本申请实施例的基于多线程的通信方法,基于第二线程接收数据,并将接收到的数据存储在数据列表中,通过对数据列表中的数据进行拷贝并校验来确定是否已经接收到完整帧数据,若未接收到完整帧数据则接收到数据后再次拷贝和校验,若接收到完整帧数据则再校验第一数据与第一指令的匹配性。这样,可以通过将接收到的数据存储在数据列表,来有效地完成对完整帧的校验和与第一指令匹配性的校验,从而可以避免数据丢失和帧数据错读的问题。
需要说明的是,本申请实施例中基于第一线程和第二线程的执行过程可以为一个实施例,基于第一线程的执行过程也可以为一个单独的实施例,基于第二线程的执行过程也可以为一个单独的实施例。
为了实现上述实施例,本申请实施例提供了一种基于多线程的通信装置,该装置应用于上位机。
图4为本申请实施例所提供的一种基于多线程的通信装置的结构框图,作为示例而非限定。如图4所示,本申请实施例所提供的基于多线程的通信装置包括:
发送模块401,用于基于第一线程发送指令队列中的第一指令,并将第一指令存储于目标队列中;
接收模块402,用于基于第二线程接收第一数据,并确定第一数据是否与目标队列中的第一指令匹配;
指令删除模块403,用于若第一数据与目标队列中的第一指令匹配,则基于第二线程删除目标队列中的第一指令;
发送模块401,还用于在确定目标队列中的指令为空之后,基于第一线程发送指令队列中的第二指令;其中,第一线程与第二线程不同。
在本申请的一些实施例中,发送模块还401用于:
在基于第一线程发送指令队列中的第一指令之前,基于第一线程检测指令队列中的指令是否为空;
若指令队列中的指令为空,则基于第一线程休眠第一预设时间段后,继续检测指令队列中的指令是否为空;
在本申请的一些实施例中,发送模块401还用于:
若指令队列中的指令为非空,则基于第一线程从指令队列中取出第一指令,并发送第一指令。
作为一种可能的实现方式,指令队列未阻塞队列或者非阻塞队列;发送模块401还用于:
若阻塞队列中的指令为非空,则基于第一线程从阻塞队列中取出第一指令;或者,
若阻塞队列中的指令为空且非阻塞队列的指令为非空,则基于第一线程从非阻塞队列中取出第一指令。
示例性的,该通信装置还可以包括指令存储模块404,该指令存储模块404用于:
基于第三线程在每次接收到用户指令时,确定用户指令的类型;
若用户指令的类型为阻塞型,基于第三线程将用户指令放入阻塞队列中;或者,
若用户指令的类型为非阻塞型,基于第三线程将用户指令放入非阻塞队列中。
作为一种可能的实现方式,发送模块401还用于:
在基于第一线程确定目标队列中的指令为空之后,基于第一线程发送指令队列中的第二指令之前,基于第一线程每间隔第二预设时间段检测一次目标队列中的指令是否为非空;
若连续N次检测目标队列中的指令为非空,则基于第一线程删除目标队列的第一指令,N为大于预设值的正整数;
在基于第一线程删除目标队列的第一指令之后,确定目标队列中的指令为空。
示例性的,发送模块401还用于:
在基于第一线程删除目标队列的第一指令之后,基于第一线程以预设方式显示用于指示指令超时的提醒。
作为一种可能的实现方式,接收模块402具体用于:
基于第二线程接收至少一个第二数据,并将至少一个第二数据存储在数据列表中;
在数据列表中的数据长度大于预设长度阈值时,对数据列表中的数据进行拷贝;
确定拷贝的数据列表中的数据是否为完整帧数据;
若拷贝的数据列表中的数据为完整帧数据,则确定拷贝的数据列表中的数据为第一数据,并且删除数据列表中被拷贝的数据。
作为另一种可能的实现方式,接收模块402还用于:
若拷贝的数据列表中的数据为非完整帧数据,基于第二线程将拷贝的数据删除;
基于第二线程接收至少一个第三数据,并将至少一个第三数据存储在数据列表中;
对数据列表中的数据进行拷贝;
确定拷贝的数据列表中的数据是否为完整帧数据;
若拷贝的数据列表中的数据为完整帧数据,则确定拷贝的数据列表中的数据为第一数据,并且删除数据列表中被拷贝的数据。
作为又一种可能的实现方式,接收模块402还用于:
若第一数据未与目标队列中的第一指令匹配,基于第二线程将第一数据丢弃。
需要说明的是,上述装置/单元之间的信息交互、执行过程等内容,由于与本申请方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
为了实现上述实施例,本申请实施例还提供了一种上位机。
图5为本申请实施例所提供的一种上位机的结构示意图。如图5所示,该实施例的上位机500包括:至少一个处理器501(图5中仅示出一个)、存储器502以及存储在所述存储器502中并可在所述至少一个处理器501上运行的计算机程序503,所述处理器501执行所述计算机程序503时实现上述任意各个基于多线程的通信方法实施例中的步骤。
上位机500可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。上位机500可包括,但不仅限于,处理器501、存储器502。本领域技术人员可以理解,图5仅仅是上位机500的举例,并不构成对上位机500的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、网络接入设备等。需要说明的是,上位机500配置有与下位机通信连接的串口。
所称处理器501可以是中央处理单元(Central Processing Unit,CPU),该处理器501还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器502在一些实施例中可以是上位机500的内部存储单元,例如上位机500的硬盘或内存。所述存储器502在另一些实施例中也可以是上位机500的外部存储设备,例如上位机500上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器502还可以既包括上位机500的内部存储单元也包括外部存储设备。所述存储器502用于存储操作系统、应用程序、引导装载程序(BootLoader)、数据以及其他程序等,例如所述计算机程序的程序代码等。所述存储器502还可以用于暂时地存储已经输出或者将要输出的数据。
本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现可实现上述各个方法实施例中的步骤。
本申请实施例提供了一种计算机程序产品,当计算机程序产品在上位机上运行时,使得上位机执行时实现可实现上述各个方法实施例中的步骤。所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质至少可以包括:能够将计算机程序代码携带到拍照装置/终端设备的任何实体或装置、记录介质、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质。例如U盘、移动硬盘、磁碟或者光盘等。在某些司法管辖区,根据立法和专利实践,计算机可读介质不可以是电载波信号和电信信号。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。在本申请所提供的实施例中,应该理解到,所揭露的装置/网络设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/网络设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。

Claims (10)

1.一种基于多线程的通信方法,其特征在于,所述通信方法应用于上位机,包括:
基于第一线程发送指令队列中的第一指令,并将所述第一指令存储于目标队列中;
基于第二线程接收第一数据,并确定所述第一数据是否与所述目标队列中的所述第一指令匹配;
若所述第一数据与所述目标队列中的所述第一指令匹配,则基于所述第二线程删除所述目标队列中的所述第一指令;
基于所述第一线程每间隔第二预设时间段检测一次所述目标队列中的指令是否为空;
在确定所述目标队列中的指令为空之后,基于所述第一线程发送所述指令队列中的第二指令;
其中,所述第一线程与所述第二线程不同。
2.如权利要求1所述的通信方法,其特征在于,在所述基于第一线程发送指令队列中的第一指令之前,还包括:
基于所述第一线程检测所述指令队列中的指令是否为空;
若所述指令队列中的指令为空,则基于所述第一线程休眠第一预设时间段后,继续检测所述指令队列中的指令是否为空;
其中,所述基于第一线程发送指令队列中的第一指令,包括:
若所述指令队列中的指令为非空,则基于所述第一线程从所述指令队列中取出所述第一指令,并发送所述第一指令。
3.如权利要求2所述的通信方法,其特征在于,所述指令队列为阻塞队列或者非阻塞队列;所述若所述指令队列中的指令为非空,则基于所述第一线程从所述指令队列中取出所述第一指令,包括:
若所述阻塞队列中的指令为非空,则基于所述第一线程从所述阻塞队列中取出所述第一指令;或者,
若所述阻塞队列中的指令为空且所述非阻塞队列的指令为非空,则基于所述第一线程从所述非阻塞队列中取出所述第一指令。
4.如权利要求3所述的通信方法,其特征在于,还包括:
基于第三线程在每次接收到用户指令时,确定所述用户指令的类型;
若所述用户指令的类型为阻塞型,基于所述第三线程将所述用户指令放入所述阻塞队列中;或者,
若所述用户指令的类型为非阻塞型,基于所述第三线程将所述用户指令放入所述非阻塞队列中。
5.如权利要求1所述的通信方法,其特征在于,在所述基于所述第一线程每间隔第二预设时间段检测一次所述目标队列中的指令是否为空之后,还包括:
若连续N次检测所述目标队列中的指令为非空,则基于所述第一线程删除所述目标队列的所述第一指令,N为大于预设值的正整数;
在基于所述第一线程删除所述目标队列的所述第一指令之后,确定所述目标队列中的指令为空。
6.如权利要求5所述的通信方法,其特征在于,在所述基于所述第一线程删除所述目标队列的所述第一指令之后,还包括:
基于所述第一线程以预设方式显示用于指示指令超时的提醒。
7.如权利要求1所述的通信方法,其特征在于,所述基于第二线程接收第一数据,包括:
基于所述第二线程接收至少一个第二数据,并将所述至少一个第二数据存储在数据列表中;
在所述数据列表中的数据长度大于预设长度阈值时,对数据列表中的数据进行拷贝;
确定拷贝的数据列表中的数据是否为完整帧数据;
若拷贝的数据列表中的数据为完整帧数据,则确定拷贝的数据列表中的数据为所述第一数据,并且删除数据列表中被拷贝的数据。
8.如权利要求7所述的通信方法,其特征在于,还包括:
若所述拷贝的数据列表中的数据为非完整帧数据,基于所述第二线程将所述拷贝的数据删除;
基于所述第二线程接收至少一个第三数据,并将所述至少一个第三数据存储在数据列表中;
对数据列表中的数据进行拷贝;
确定拷贝的数据列表中的数据是否为完整帧数据;
若拷贝的数据列表中的数据为完整帧数据,则确定拷贝的数据列表中的数据为所述第一数据,并且删除数据列表中被拷贝的数据。
9.一种上位机,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至8中任一项所述的方法。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至8中任一项所述的方法。
CN202310453152.6A 2023-04-24 2023-04-24 基于多线程的通信方法及上位机 Active CN116466996B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310453152.6A CN116466996B (zh) 2023-04-24 2023-04-24 基于多线程的通信方法及上位机

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310453152.6A CN116466996B (zh) 2023-04-24 2023-04-24 基于多线程的通信方法及上位机

Publications (2)

Publication Number Publication Date
CN116466996A CN116466996A (zh) 2023-07-21
CN116466996B true CN116466996B (zh) 2024-01-09

Family

ID=87182187

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310453152.6A Active CN116466996B (zh) 2023-04-24 2023-04-24 基于多线程的通信方法及上位机

Country Status (1)

Country Link
CN (1) CN116466996B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1550978A (zh) * 2003-05-08 2004-12-01 �Ҵ���˾ 用于执行在多个线程中排序的指令的方法和系统
CN111078436A (zh) * 2019-12-18 2020-04-28 上海金仕达软件科技有限公司 数据处理的方法、装置、设备及存储介质
CN115866035A (zh) * 2022-11-30 2023-03-28 广东舜势测控设备有限公司 多线程数据高速推送方法、系统、控制器及存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111176855B (zh) * 2018-11-09 2023-10-27 微软技术许可有限责任公司 在用户空间中建立线程之间的队列

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1550978A (zh) * 2003-05-08 2004-12-01 �Ҵ���˾ 用于执行在多个线程中排序的指令的方法和系统
CN111078436A (zh) * 2019-12-18 2020-04-28 上海金仕达软件科技有限公司 数据处理的方法、装置、设备及存储介质
CN115866035A (zh) * 2022-11-30 2023-03-28 广东舜势测控设备有限公司 多线程数据高速推送方法、系统、控制器及存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于多队列和多线程的短信实时并发控制算法;沈斌;李兴国;钟金宏;沈丽娜;;计算机工程(第08期);全文 *

Also Published As

Publication number Publication date
CN116466996A (zh) 2023-07-21

Similar Documents

Publication Publication Date Title
KR100979825B1 (ko) 직접 메모리 액세스(dma) 전송 버퍼 프로세서
CN111930676B (zh) 多处理器间的通信方法、装置、系统及存储介质
US20210311738A1 (en) Handling an input/output store instruction
CN113468097B (zh) 基于片上系统的数据交换方法
US9473273B2 (en) Memory system capable of increasing data transfer efficiency
CN116257472B (zh) 接口控制方法、装置、电子设备及存储介质
JP2695017B2 (ja) データ転送方式
CN114546914B (zh) 用于对多个通道信息执行数据处理的处理装置及系统
CN116466996B (zh) 基于多线程的通信方法及上位机
US8671230B2 (en) Data transfer device and data transfer method
CN115834739B (zh) 一种台区智能融合终端spi通信中不定长数据帧的接收方法
CN111427806A (zh) 一种双核amp系统共用串口的方法、存储介质及智能终端
WO2010050957A1 (en) Bit inversion for communication interface
CN107463829A (zh) 一种密码卡中dma请求的处理方法、系统及相关装置
CN117033276B (zh) 总线通信方法、系统、电子设备及存储介质
CN113177422B (zh) 卡检测方法、计算机设备和计算机可读存储介质
CN113141603B (zh) 一种数据通信方法、系统、主端设备及从端设备
CN214225910U (zh) 一种接口板及印迹分析设备
US11714608B2 (en) Device and method for handling programming language function
CN115599574B (zh) 图形处理系统、电子组件、电子设备及信息处理方法
CN1543145A (zh) 一种数字信号处理器内部数据传输的方法
JP3261665B2 (ja) データ転送方法及びデータ処理システム
CN116266164A (zh) 数据传输方法、dma设备、装置、通信外设和介质
CN117251321A (zh) 主板usb线路的异常检测方法、装置、终端设备及介质
CN117909264A (zh) 一种dma请求的实现方法、装置及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: Leyitong Industrial Park, No. 16 Dongsheng South Road, Chenjiang Street, Zhongkai High tech Zone, Huizhou City, Guangdong Province, 516000

Applicant after: Huizhou Leyitong Technology Co.,Ltd.

Address before: 516000 building a, industrial building, No.53, huitai Industrial Park, Zhongkai high tech Zone, Huizhou City, Guangdong Province

Applicant before: HUIZHOU LEYITONG TECHNOLOGY CO.,LTD.

CB02 Change of applicant information
GR01 Patent grant
GR01 Patent grant