一种基于POS机的多线程同步方法及POS机转让专利

申请号 : CN201811572525.7

文献号 : CN109783142B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 许世杰

申请人 : 福建新大陆支付技术有限公司

摘要 :

本发明公开了一种基于POS机的多线程同步方法及POS机。其中,所述方法包括:POS机将矢量字体的处理和打印过程分解成矢量字体处理线程和打印线程共两个相互独立的线程,同步该矢量字体处理线程和该打印线程,在该矢量字体处理线程处理完矢量字体数据后,控制该矢量字体处理线程将打印数据放置到打印队列,控制打印线程打印该打印队列的信息。通过上述方式,能够实现POS机引入多线程同步机制来优化矢量字体打印方式,打印流畅,打印速度快。

权利要求 :

1.一种基于POS机的多线程同步方法,其特征在于,包括:

POS机将矢量字体的处理和打印过程分解成矢量字体处理线程和打印线程共两个相互独立的线程;

同步所述矢量字体处理线程和所述打印线程;其中,所述矢量字体处理线程和所述打印线程之间通过互斥锁、条件变量、全局标志位同步,通过循环队列共享打印数据,所述循环队列中的每个元素包含待打印的位图数据、打印宽度、打印高度和打印偏移信息;

在所述矢量字体处理线程处理完矢量字体数据后,控制所述矢量字体处理线程将打印数据放置到打印队列;

控制打印线程打印所述打印队列的信息;

所述POS机同步所述矢量字体处理线程,包括:

POS机控制所述矢量字体处理线程往打印队列中放入打印数据时,尝试获取互斥锁,若无法获取互斥锁,则阻塞该矢量字体处理线程,此时所述打印线程占用互斥锁,直到所述打印线程主动释放互斥锁,唤醒所述矢量字体处理线程;

POS机控制所述矢量字体处理线程判断打印队列是否已满,若打印队列未满,则往打印队列尾中存入打印数据;

POS机控制所述矢量字体处理线程判断当前打印队列是否仅有一个元素,包括:

POS机控制所述矢量字体处理线程判断当前打印队列是否仅有一个元素,若判断出当前打印队列不是仅有一个元素,则接着判断打印数据是否已经处理完毕,若判断出打印数据已经处理完毕,则设置全局标志位,通知所述打印线程在打印工作结束后退出,同时释放互斥锁;

POS机控制所述矢量字体处理线程判断当前打印队列是否仅有一个元素,若判断出当前打印队列仅有一个元素,则通过打印队列可读条件变量将所述打印线程唤醒,接着判断打印数据是否已经处理完毕,若判断出打印数据已经处理完毕,则设置全局标志位,通知所述打印线程在打印工作结束后退出,同时释放互斥锁。

2.如权利要求1所述的基于POS机的多线程同步方法,其特征在于,所述POS机同步所述矢量字体处理线程和所述打印线程,包括:POS机采用互斥锁和条件变量以及全局标志位方式同步所述矢量字体处理线程和所述打印线程。

3.如权利要求1所述的基于POS机的多线程同步方法,其特征在于,所述POS机同步所述打印线程,包括:POS机控制所述打印线程从所述打印队列中获取打印数据,尝试获取互斥锁,若无法获取互斥锁,则阻塞该打印线程,此时所述矢量字体处理线程占用互斥锁,直到所述矢量字体处理线程主动释放互斥锁,唤醒所述打印线程;

POS机控制所述打印线程判断所述打印队列是否为空,包括:

POS机控制所述打印线程判断所述打印队列是否为空,若判断出所述打印队列不为空时,则所述打印线程从所述打印队列头取出打印数据并执行打印操作,所述打印线程接着判断当前打印队列是否仅剩一个空位,若判断出当前打印队列仅剩一个空位,则所述打印线程通过打印队列可写条件变量唤醒所述矢量字体处理线程,所述打印线程接着根据全局标志位的状态判断打印数据是否处理完成,根据所述全局标志位的状态来决定是否退出打印线程,在判断出打印数据是否处理完成的全局标志位的状态是处理完成时,所述打印线程在打印工作结束后退出,同时释放互斥锁;

POS机控制所述打印线程判断所述打印队列是否为空,若判断出所述打印队列为空时,则阻塞该打印线程,通过打印队列可读条件变量等待所述矢量字体处理线程唤醒,直到所述矢量字体处理线程被唤醒并释放互斥锁,则所述打印线程从所述打印队列头取出打印数据并执行打印操作,所述打印线程接着判断当前打印队列是否仅剩一个空位,若判断出当前打印队列仅剩一个空位,则所述打印线程通过打印队列可写条件变量唤醒所述矢量字体处理线程,所述打印线程接着根据全局标志位的状态判断打印数据是否处理完成,根据所述全局标志位的状态来决定是否退出打印线程,在判断出打印数据是否处理完成的全局标志位的状态是处理完成时,所述打印线程在打印工作结束后退出,同时释放互斥锁。

4.如权利要求3所述的基于POS机的多线程同步方法,其特征在于,在所述POS机打印所述打印队列的信息之后,还包括:POS机备份所述打印队列。

5.一种POS机,其特征在于,包括:

分解模块、同步模块、放置模块和打印模块;

所述分解模块,用于将矢量字体的处理和打印过程分解成矢量字体处理线程和打印线程共两个相互独立的线程;

所述同步模块,用于同步所述矢量字体处理线程和所述打印线程;其中,所述矢量字体处理线程和所述打印线程之间通过互斥锁、条件变量、全局标志位同步,通过循环队列共享打印数据,所述循环队列中的每个元素包含待打印的位图数据、打印宽度、打印高度和打印偏移信息;

所述放置模块,用于在所述矢量字体处理线程处理完矢量字体数据后,控制所述矢量字体处理线程将打印数据放置到打印队列;

所述打印模块,用于控制打印线程打印所述打印队列的信息;

所述同步模块,进一步用于:

控制所述矢量字体处理线程往打印队列中放入打印数据时,尝试获取互斥锁,若无法获取互斥锁,则阻塞该矢量字体处理线程,此时所述打印线程占用互斥锁,直到所述打印线程主动释放互斥锁,唤醒所述矢量字体处理线程;

控制所述矢量字体处理线程判断打印队列是否已满,若打印队列未满,则往打印队列尾中存入打印数据;

控制所述矢量字体处理线程判断当前打印队列是否仅有一个元素,包括:

控制所述矢量字体处理线程判断当前打印队列是否仅有一个元素,若判断出当前打印队列不是仅有一个元素,则接着判断打印数据是否已经处理完毕,若判断出打印数据已经处理完毕,则设置全局标志位,通知所述打印线程在打印工作结束后退出,同时释放互斥锁;

控制所述矢量字体处理线程判断当前打印队列是否仅有一个元素,若判断出当前打印队列仅有一个元素,则通过打印队列可读条件变量将所述打印线程唤醒,接着判断打印数据是否已经处理完毕,若判断出打印数据已经处理完毕,则设置全局标志位,通知所述打印线程在打印工作结束后退出,同时释放互斥锁。

6.如权利要求5所述的POS机,其特征在于,所述同步模块,用于:

采用互斥锁和条件变量以及全局标志位方式,同步所述矢量字体处理线程和所述打印线程。

7.如权利要求6所述的POS机,其特征在于,所述同步模块,用于:

控制所述打印线程从所述打印队列中获取打印数据,尝试获取互斥锁,若无法获取互斥锁,则阻塞该打印线程,此时所述矢量字体处理线程占用互斥锁,直到所述矢量字体处理线程主动释放互斥锁,唤醒所述打印线程;

控制所述打印线程判断所述打印队列是否为空,包括:

控制所述打印线程判断所述打印队列是否为空,若判断出所述打印队列不为空时,则所述打印线程从所述打印队列头取出打印数据并执行打印操作,所述打印线程接着判断当前打印队列是否仅剩一个空位,若判断出当前打印队列仅剩一个空位,则所述打印线程通过打印队列可写条件变量唤醒所述矢量字体处理线程,所述打印线程接着根据全局标志位的状态判断打印数据是否处理完成,根据所述全局标志位的状态来决定是否退出打印线程,在判断出打印数据是否处理完成的全局标志位的状态是处理完成时,所述打印线程在打印工作结束后退出,同时释放互斥锁;

控制所述打印线程判断所述打印队列是否为空,若判断出所述打印队列为空时,则阻塞该打印线程,通过打印队列可读条件变量等待所述矢量字体处理线程唤醒,直到所述矢量字体处理线程被唤醒并释放互斥锁,则所述打印线程从所述打印队列头取出打印数据并执行打印操作,所述打印线程接着判断当前打印队列是否仅剩一个空位,若判断出当前打印队列仅剩一个空位,则所述打印线程通过打印队列可写条件变量唤醒所述矢量字体处理线程,所述打印线程接着根据全局标志位的状态判断打印数据是否处理完成,根据所述全局标志位的状态来决定是否退出打印线程,在判断出打印数据是否处理完成的全局标志位的状态是处理完成时,所述打印线程在打印工作结束后退出,同时释放互斥锁。

8.如权利要求7所述的POS机,其特征在于,所述POS机,还包括:备份模块,用于备份所述打印队列。

说明书 :

一种基于POS机的多线程同步方法及POS机

技术领域

[0001] 本发明涉及POS机技术领域,尤其涉及一种基于POS机的多线程同步方法及POS机。

背景技术

[0002] POS(Point Of Sale,销售终端)机,是一种配有条码或OCR(Optical Character Recognition,光学字符识别)码技术终端阅读器,具有现金或易货额度出纳功能。
[0003] POS机的基本原理,包括:
[0004] POS机先将商品资料创建于计算机文件内,透过计算机收银机联机架构,商品上之条码能透过收银设备上光学读取设备直接读入后,马上可以显示商品信息加速收银速度与正确性。POS机中的每笔商品销售明细资料自动记录下来,再由联机架构传回计算机,经由计算机计算处理即能生成各种销售统计分析信息当为经营管理依据。
[0005] 现有的POS机上主要使用热敏打印机,可以采用点阵字体打印方式或采用矢量字体打印方式进行打印。但是点阵字体很难进行缩放,特定的点阵字体只能清晰地显示在相应的字号下,强行缩放会导致文字失真变形,产生边缘锯齿。现有的点阵字体打印方式在打印不同字体大小、不同语言的文字时,需要针对特定的语言及字体大小存储多份字体文件,使用上非常不灵活,且浪费存储空间。而现有的矢量字体打印方式中,矢量字体的同一个字体文件可以包含多种不同语言,矢量字体的大小可以自由设置,无需存储多份矢量字体文件或使用强制缩放算法。
[0006] 但是,发明人发现现有技术中至少存在如下问题:
[0007] 现有的POS机采用矢量字体打印方式进行打印时,矢量字体打印方式需要经过大量的数学运算来进行渲染,存在打印速度慢,打印过程有卡顿的的问题。

发明内容

[0008] 有鉴于此,本发明的目的在于提出一种基于POS机的多线程同步方法及POS机,能够实现POS机引入多线程同步机制优化矢量字体打印方式,打印流畅,打印速度快。
[0009] 根据本发明的一个方面,提供一种基于POS机的多线程同步方法,包括:
[0010] POS机将矢量字体的处理和打印过程分解成矢量字体处理线程和打印线程共两个相互独立的线程;
[0011] 同步所述矢量字体处理线程和所述打印线程;其中,所述矢量字体处理线程和所述打印线程之间通过互斥锁、条件变量、全局标志位同步,通过循环队列共享打印数据,所述循环队列中的每个元素包含待打印的位图数据、打印宽度、打印高度和打印偏移信息;
[0012] 在所述矢量字体处理线程处理完矢量字体数据后,控制所述矢量字体处理线程将打印数据放置到打印队列;
[0013] 控制打印线程打印所述打印队列的信息。
[0014] 其中,所述POS机同步矢量字体处理线程和所述打印线程,包括:
[0015] POS机采用互斥锁和条件变量以及全局标志位方式,同步所述矢量字体处理线程和所述打印线程。
[0016] 其中,所述POS机同步所述矢量字体处理线程,包括:
[0017] POS机控制所述矢量字体处理线程往打印队列中放入打印数据时,尝试获取互斥锁,若无法获取互斥锁,则阻塞该矢量字体处理线程,此时所述打印线程占用互斥锁,直到所述打印线程主动释放互斥锁,唤醒所述矢量字体处理线程;
[0018] POS机控制所述矢量字体处理线程判断打印队列是否已满,若打印队列未满,则往打印队列尾中存入打印数据;
[0019] POS机控制所述矢量字体处理线程判断当前打印队列是否仅有一个元素,包括:
[0020] POS机控制所述矢量字体处理线程判断当前打印队列是否仅有一个元素,若判断出当前打印队列不是仅有一个元素,则接着判断打印数据是否已经处理完毕,若判断出打印数据已经处理完毕,则设置全局标志位,通知所述打印线程在打印工作结束后退出,同时释放互斥锁;
[0021] POS机控制所述矢量字体处理线程判断当前打印队列是否仅有一个元素,若判断出当前打印队列仅有一个元素,则通过打印队列可读条件变量将所述打印线程唤醒,接着判断打印数据是否已经处理完毕,若判断出打印数据已经处理完毕,则设置全局标志位,通知所述打印线程在打印工作结束后退出,同时释放互斥锁。
[0022] 其中,所述POS机同步所述打印线程,包括:
[0023] POS机控制所述打印线程从所述打印队列中获取打印数据,尝试获取互斥锁,若无法获取互斥锁,则阻塞该打印线程,此时所述矢量字体处理线程占用互斥锁,直到所述矢量字体处理线程主动释放互斥锁,唤醒所述打印线程;
[0024] POS机控制所述打印线程判断所述打印队列是否为空,包括:
[0025] POS机控制所述打印线程判断所述打印队列是否为空,若判断出所述打印队列不为空时,则所述打印线程从所述打印队列头取出打印数据并执行打印操作,所述打印线程接着判断当前打印队列是否仅剩一个空位,若判断出当前打印队列仅剩一个空位,则所述打印线程通过打印队列可写条件变量唤醒所述矢量字体处理线程,所述打印线程接着判断打印数据是否处理完成的全局标志位的状态,根据所述全局标志位的状态来决定是否退出打印线程,在判断出打印数据是否处理完成的全局标志位的状态是处理完成时,所述打印线程在打印工作结束后退出,同时释放互斥锁;
[0026] POS机控制所述打印线程判断所述打印队列是否为空,若判断出所述打印队列为空时,则阻塞该打印线程,通过打印队列可读条件变量等待所述矢量字体处理线程唤醒,直到所述矢量字体处理线程唤醒并释放互斥锁,则所述打印线程从所述打印队列头取出打印数据并执行打印操作,所述打印线程接着判断当前打印队列是否仅剩一个空位,若判断出当前打印队列仅剩一个空位,则所述打印线程通过打印队列可写条件变量唤醒所述矢量字体处理线程,所述打印线程接着判断打印数据是否处理完成的全局标志位的状态,根据所述全局标志位的状态来决定是否退出打印线程,在判断出打印数据是否处理完成的全局标志位的状态是处理完成时,所述打印线程在打印工作结束后退出,同时释放互斥锁。
[0027] 其中,在所述POS机打印所述打印队列的信息之后,还包括:
[0028] POS机备份所述打印队列。
[0029] 根据本发明的另一个方面,提供一种POS机,包括:
[0030] 分解模块、同步模块、放置模块和打印模块;
[0031] 所述分解模块,用于将矢量字体的处理和打印过程分解成矢量字体处理线程和打印线程共两个相互独立的线程;
[0032] 所述同步模块,用于同步所述矢量字体处理线程和所述打印线程;其中,所述矢量字体处理线程和所述打印线程之间通过互斥锁、条件变量、全局标志位同步,通过循环队列共享打印数据,所述循环队列中的每个元素包含待打印的位图数据、打印宽度、打印高度和打印偏移信息;
[0033] 所述放置模块,用于在所述矢量字体处理线程处理完矢量字体数据后,控制所述矢量字体处理线程将打印数据放置到打印队列;
[0034] 所述打印模块,用于控制打印线程打印所述打印队列的信息。
[0035] 其中,所述同步模块,具体用于:
[0036] 采用互斥锁和条件变量以及全局标志位方式,同步所述矢量字体处理线程和所述打印线程。
[0037] 其中,所述同步模块,具体用于:
[0038] 控制所述矢量字体处理线程往打印队列中放入打印数据时,尝试获取互斥锁,若无法获取互斥锁,则阻塞该矢量字体处理线程,此时所述打印线程占用互斥锁,直到所述打印线程主动释放互斥锁,唤醒所述矢量字体处理线程;
[0039] 控制所述矢量字体处理线程判断打印队列是否已满,若打印队列未满,则往打印队列尾中存入打印数据;
[0040] 控制所述矢量字体处理线程判断当前打印队列是否仅有一个元素,包括:
[0041] 控制所述矢量字体处理线程判断当前打印队列是否仅有一个元素,若判断出当前打印队列不是仅有一个元素,则接着判断打印数据是否已经处理完毕,若判断出打印数据已经处理完毕,则设置全局标志位,通知所述打印线程在打印工作结束后退出,同时释放互斥锁;
[0042] 控制所述矢量字体处理线程判断当前打印队列是否仅有一个元素,若判断出当前打印队列仅有一个元素,则通过打印队列可读条件变量将所述打印线程唤醒,接着判断打印数据是否已经处理完毕,若判断出打印数据已经处理完毕,则设置全局标志位,通知所述打印线程在打印工作结束后退出,同时释放互斥锁。
[0043] 其中,所述同步模块,具体用于:
[0044] 控制所述打印线程从所述打印队列中获取打印数据,尝试获取互斥锁,若无法获取互斥锁,则阻塞该打印线程,此时所述矢量字体处理线程占用互斥锁,直到所述矢量字体处理线程主动释放互斥锁,唤醒所述打印线程;
[0045] 控制所述打印线程判断所述打印队列是否为空,包括:
[0046] 控制所述打印线程判断所述打印队列是否为空,若判断出所述打印队列不为空时,则所述打印线程从所述打印队列头取出打印数据并执行打印操作,所述打印线程接着判断当前打印队列是否仅剩一个空位,若判断出当前打印队列仅剩一个空位,则所述打印线程通过打印队列可写条件变量唤醒所述矢量字体处理线程,所述打印线程接着判断打印数据是否处理完成的全局标志位的状态,根据所述全局标志位的状态来决定是否退出打印线程,在判断出打印数据是否处理完成的全局标志位的状态是处理完成时,所述打印线程在打印工作结束后退出,同时释放互斥锁;
[0047] 控制所述打印线程判断所述打印队列是否为空,若判断出所述打印队列为空时,则阻塞该打印线程,通过打印队列可读条件变量等待所述矢量字体处理线程唤醒,直到所述矢量字体处理线程唤醒并释放互斥锁,则所述打印线程从所述打印队列头取出打印数据并执行打印操作,所述打印线程接着判断当前打印队列是否仅剩一个空位,若判断出当前打印队列仅剩一个空位,则所述打印线程通过打印队列可写条件变量唤醒所述矢量字体处理线程,所述打印线程接着判断打印数据是否处理完成的全局标志位的状态,根据所述全局标志位的状态来决定是否退出打印线程,在判断出打印数据是否处理完成的全局标志位的状态是处理完成时,所述打印线程在打印工作结束后退出,同时释放互斥锁。
[0048] 其中,所述POS机,还包括:
[0049] 备份模块,用于备份所述打印队列。
[0050] 可以发现,以上方案,POS机可以将矢量字体的处理和打印过程分解成矢量字体处理线程和打印线程共两个相互独立的线程,进而同步该矢量字体处理线程和该打印线程,进而在矢量字体处理线程处理完矢量字体数据后,控制该矢量字体处理线程将打印数据放置到打印队列,进而控制打印线程打印该打印队列的信息,能够实现POS机引入多线程同步机制优化矢量字体打印方式,打印流畅,打印速度快。
[0051] 进一步的,以上方案,POS机可以备份打印队列,能够实现POS机能备份打印队列,在需要应用到该打印队列时,能从该备份数据中还原出该打印队列,方便用户使用该打印队列,提高了用户体验。

附图说明

[0052] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0053] 图1是本发明基于POS机的多线程同步方法一实施例的流程示意图;
[0054] 图2是本发明基于POS机的多线程同步方法另一实施例的流程示意图;
[0055] 图3是本发明POS机一实施例的结构示意图;
[0056] 图4是本发明POS机另一实施例的结构示意图;
[0057] 图5是本发明POS机又一实施例的结构示意图。

具体实施方式

[0058] 下面结合附图和实施例,对本发明作进一步的详细描述。特别指出的是,以下实施例仅用于说明本发明,但不对本发明的范围进行限定。同样的,以下实施例仅为本发明的部分实施例而非全部实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
[0059] 本发明提供一种基于POS机的多线程同步方法,能够实现POS机引入多线程同步机制优化矢量字体打印方式,打印流畅,打印速度快。
[0060] 请参见图1,图1是本发明基于POS机的多线程同步方法一实施例的流程示意图。需注意的是,若有实质上相同的结果,本发明的方法并不以图1所示的流程顺序为限。如图1所示,该方法包括如下步骤:
[0061] S101:POS机将矢量字体的处理和打印过程分解成矢量字体处理线程和打印线程共两个相互独立的线程。
[0062] S102:POS机同步该矢量字体处理线程和该打印线程;其中,该矢量字体处理线程和该打印线程之间通过互斥锁、条件变量、全局标志位同步,通过循环队列共享打印数据,该循环队列中的每个元素包含待打印的位图数据、打印宽度、打印高度和打印偏移信息等。
[0063] 其中,该POS机同步该矢量字体处理线程和该打印线程,可以包括:
[0064] POS机采用互斥锁和条件变量以及全局标志位方式,使该矢量字体处理线程和该打印线程同步。
[0065] 其中,POS机同步该矢量字体处理线程,可以包括:
[0066] POS机控制该矢量字体处理线程往打印队列中放入打印数据时,尝试获取互斥锁,若无法获取互斥锁,则阻塞该矢量字体处理线程,此时该打印线程占用互斥锁,直到该打印线程主动释放互斥锁,唤醒该矢量字体处理线程;
[0067] POS机控制该矢量字体处理线程判断打印队列是否已满,若打印队列未满,则往打印队列尾中存入打印数据;
[0068] POS机控制该矢量字体处理线程判断当前打印队列是否仅有一个元素,可以包括:
[0069] POS机控制该矢量字体处理线程判断当前打印队列是否仅有一个元素,若判断出当前打印队列不是仅有一个元素,则接着判断打印数据是否已经处理完毕,若判断出打印数据已经处理完毕,则设置全局标志位,通知该打印线程在打印工作结束后退出,同时释放互斥锁;
[0070] POS机控制该矢量字体处理线程判断当前打印队列是否仅有一个元素,若判断出当前打印队列仅有一个元素,则通过打印队列可读条件变量将该打印线程唤醒,接着判断打印数据是否已经处理完毕,若判断出打印数据已经处理完毕,则设置全局标志位,通知该打印线程在打印工作结束后退出,同时释放互斥锁。
[0071] 其中,POS机同步该打印线程,可以包括:
[0072] POS机控制该打印线程从该打印队列中获取打印数据,尝试获取互斥锁,若无法获取互斥锁,则阻塞该打印线程,此时该矢量字体处理线程占用互斥锁,直到该矢量字体处理线程主动释放互斥锁,唤醒该打印线程;
[0073] POS机控制该打印线程判断该打印队列是否为空,可以包括:
[0074] POS机控制该打印线程判断该打印队列是否为空,若判断出该打印队列不为空时,则该打印线程从该打印队列头取出打印数据并执行打印操作,该打印线程接着判断当前打印队列是否仅剩一个空位,若判断出当前打印队列仅剩一个空位,则该打印线程通过打印队列可写条件变量唤醒该矢量字体处理线程,该打印线程接着判断打印数据是否处理完成的全局标志位的状态,根据该全局标志位的状态来决定是否退出打印线程,在判断出打印数据是否处理完成的全局标志位的状态是处理完成时,该打印线程在打印工作结束后退出,同时释放互斥锁;
[0075] POS机控制该打印线程判断该打印队列是否为空,若判断出该打印队列为空时,则阻塞该打印线程,通过打印队列可读条件变量等待该矢量字体处理线程唤醒,直到该矢量字体处理线程唤醒并释放互斥锁,则该打印线程从该打印队列头取出打印数据并执行打印操作,该打印线程接着判断当前打印队列是否仅剩一个空位,若判断出当前打印队列仅剩一个空位,则该打印线程通过打印队列可写条件变量唤醒该矢量字体处理线程,该打印线程接着判断打印数据是否处理完成的全局标志位的状态,根据该全局标志位的状态来决定是否退出打印线程,在判断出打印数据是否处理完成的全局标志位的状态是处理完成时,该打印线程在打印工作结束后退出,同时释放互斥锁。
[0076] 在本实施例中,该互斥锁,用于保证同一时间只有一个线程访问打印队列。
[0077] 在本实施例中,该条件变量可以包括可读条件变量和可写条件变量,该可读条件变量用于控制打印队列的读操作,该可写条件变量用于控制打印队列的写操作。
[0078] 在本实施例中,该全局标志位,用于判断打印线程是否需要退出。
[0079] S103:POS机在该矢量字体处理线程处理完矢量字体数据后,控制该矢量字体处理线程将打印数据放置到打印队列。
[0080] S104:POS机控制打印线程打印该打印队列的信息。
[0081] 其中,在该POS机打印该打印队列的信息之后,还可以包括:
[0082] POS机备份该打印队列。
[0083] 可以发现,在本实施例中,POS机可以将矢量字体的处理和打印过程分解成矢量字体处理线程和打印线程共两个相互独立的线程,进而同步该矢量字体处理线程和该打印线程,进而在该矢量字体处理线程处理完矢量字体数据后,控制该矢量字体处理线程将打印数据放置到打印队列,进而控制打印线程打印该打印队列的信息,能够实现POS机引入多线程同步机制优化矢量字体打印方式,打印流畅,打印速度快。
[0084] 请参见图2,图2是本发明基于POS机的多线程同步方法另一实施例的流程示意图。本实施例中,该方法包括以下步骤:
[0085] S201:POS机将矢量字体的处理和打印过程分解成矢量字体处理线程和打印线程共两个相互独立的线程。
[0086] S202:POS机同步该矢量字体处理线程和该打印线程;其中,该矢量字体处理线程和该打印线程之间通过互斥锁、条件变量、全局标志位同步,通过循环队列共享打印数据,该循环队列中的每个元素包含待打印的位图数据、打印宽度、打印高度和打印偏移信息等。
[0087] 可如上S102所述,在此不作赘述。
[0088] S203:POS机在该矢量字体处理线程处理完矢量字体数据后,控制该矢量字体处理线程将打印数据放置到打印队列。
[0089] S204:POS机控制打印线程打印该打印队列的信息。
[0090] S205:POS机备份该打印队列。
[0091] 可以发现,在本实施例中,POS机可以备份打印队列,能够实现POS机能备份打印队列,在需要应用到该打印队列时,能从该备份数据中还原出该打印队列,方便用户使用该打印队列,提高了用户体验。
[0092] 本发明还提供一种POS机,能够实现POS机引入多线程同步机制优化矢量字体打印方式,打印流畅,打印速度快。
[0093] 请参见图3,图3是本发明POS机一实施例的结构示意图。本实施例中,该POS机30为上述实施例中的POS机,该POS机30包括分解模块31、同步模块32、放置模块33和打印模块34。
[0094] 该分解模块31,用于将矢量字体的处理和打印过程分解成矢量字体处理线程和打印线程共两个相互独立的线程。
[0095] 该同步模块32,用于同步该矢量字体处理线程和该打印线程;其中,该矢量字体处理线程和该打印线程之间通过互斥锁、条件变量、全局标志位同步,通过循环队列共享打印数据,该循环队列中的每个元素包含待打印的位图数据、打印宽度、打印高度和打印偏移信息等。
[0096] 该放置模块33,用于在该矢量字体处理线程处理完矢量字体数据后,控制该矢量字体处理线程将打印数据放置到打印队列。
[0097] 该打印模块34,用于控制打印线程打印该打印队列的信息。
[0098] 可选地,该同步模块32,可以具体用于:
[0099] 采用互斥锁和条件变量以及全局标志位方式,同步该矢量字体处理线程和该打印线程。
[0100] 可选地,该同步模块32,可以具体用于:
[0101] 控制该矢量字体处理线程往打印队列中放入打印数据时,尝试获取互斥锁,若无法获取互斥锁,则阻塞该矢量字体处理线程,此时该打印线程占用互斥锁,直到该打印线程主动释放互斥锁,唤醒该矢量字体处理线程;
[0102] 控制该矢量字体处理线程判断打印队列是否已满,若打印队列未满,则往打印队列尾中存入打印数据;
[0103] 控制该矢量字体处理线程判断当前打印队列是否仅有一个元素,可以包括:
[0104] 控制该矢量字体处理线程判断当前打印队列是否仅有一个元素,若判断出当前打印队列不是仅有一个元素,则接着判断打印数据是否已经处理完毕,若判断出打印数据已经处理完毕,则设置全局标志位,通知该打印线程在打印工作结束后退出,同时释放互斥锁;
[0105] 控制该矢量字体处理线程判断当前打印队列是否仅有一个元素,若判断出当前打印队列仅有一个元素,则通过打印队列可读条件变量将该打印线程唤醒,接着判断打印数据是否已经处理完毕,若判断出打印数据已经处理完毕,则设置全局标志位,通知该打印线程在打印工作结束后退出,同时释放互斥锁。
[0106] 可选地,该同步模块32,可以具体用于:
[0107] 控制该打印线程从该打印队列中获取打印数据,尝试获取互斥锁,若无法获取互斥锁,则阻塞该打印线程,此时该矢量字体处理线程占用互斥锁,直到该矢量字体处理线程主动释放互斥锁,唤醒该打印线程;
[0108] 控制该打印线程判断该打印队列是否为空,可以包括:
[0109] 控制该打印线程判断该打印队列是否为空,若判断出该打印队列不为空时,则该打印线程从该打印队列头取出打印数据并执行打印操作,该打印线程接着判断当前打印队列是否仅剩一个空位,若判断出当前打印队列仅剩一个空位,则该打印线程通过打印队列可写条件变量唤醒该矢量字体处理线程,该打印线程接着判断打印数据是否处理完成的全局标志位的状态,根据该全局标志位的状态来决定是否退出打印线程,在判断出打印数据是否处理完成的全局标志位的状态是处理完成时,该打印线程在打印工作结束后退出,同时释放互斥锁;
[0110] 控制该打印线程判断该打印队列是否为空,若判断出该打印队列为空时,则阻塞该打印线程,通过打印队列可读条件变量等待该矢量字体处理线程唤醒,直到该矢量字体处理线程唤醒并释放互斥锁,则该打印线程从该打印队列头取出打印数据并执行打印操作,该打印线程接着判断当前打印队列是否仅剩一个空位,若判断出当前打印队列仅剩一个空位,则该打印线程通过打印队列可写条件变量唤醒该矢量字体处理线程,该打印线程接着判断打印数据是否处理完成的全局标志位的状态,根据该全局标志位的状态来决定是否退出打印线程,在判断出打印数据是否处理完成的全局标志位的状态是处理完成时,该打印线程在打印工作结束后退出,同时释放互斥锁。
[0111] 请参见图4,图4是本发明POS机另一实施例的结构示意图。区别于上一实施例,本实施例所述POS机40还包括:备份模块41。
[0112] 该备份模块41,用于备份该打印队列。
[0113] 该POS机30/40的各个单元模块可分别执行上述方法实施例中对应步骤,故在此不对各单元模块进行赘述,详细请参见以上对应步骤的说明。
[0114] 请参见图5,图5是本发明POS机又一实施例的结构示意图。该POS机的各个单元模块可以分别执行上述方法实施例中对应步骤。相关内容请参见上述方法中的详细说明,在此不再赘叙。
[0115] 本实施例中,该POS机包括:处理器51、与该处理器51耦合的存储器52、打印器53、备份器54。
[0116] 该处理器51,用于将矢量字体的处理和打印过程分解成矢量字体处理线程和打印线程共两个相互独立的线程,并同步该矢量字体处理线程和该打印线程,以及在该矢量字体处理线程处理完矢量字体数据后,控制该矢量字体处理线程将打印数据放置到打印队列;其中,该矢量字体处理线程和该打印线程之间通过互斥锁、条件变量、全局标志位同步,通过循环队列共享打印数据,该循环队列中的每个元素包含待打印的位图数据、打印宽度、打印高度和打印偏移信息等。
[0117] 该存储器52,用于存储操作系统、该处理器51执行的指令等。
[0118] 该打印器53,用于控制打印线程打印该打印队列的信息。
[0119] 该备份器54,用于备份该打印队列。
[0120] 可选地,该处理器51,可以具体用于:
[0121] 采用互斥锁和条件变量以及全局标志位方式,同步该矢量字体处理线程和该打印线程。
[0122] 可选地,该处理器51,可以具体用于:
[0123] 控制该矢量字体处理线程往打印队列中放入打印数据时,尝试获取互斥锁,若无法获取互斥锁,则阻塞该矢量字体处理线程,此时该打印线程占用互斥锁,直到该打印线程主动释放互斥锁,唤醒该矢量字体处理线程;
[0124] 控制该矢量字体处理线程判断打印队列是否已满,若打印队列未满,则往打印队列尾中存入打印数据;
[0125] 控制该矢量字体处理线程判断当前打印队列是否仅有一个元素,可以包括:
[0126] 控制该矢量字体处理线程判断当前打印队列是否仅有一个元素,若判断出当前打印队列不是仅有一个元素,则接着判断打印数据是否已经处理完毕,若判断出打印数据已经处理完毕,则设置全局标志位,通知该打印线程在打印工作结束后退出,同时释放互斥锁;
[0127] 控制该矢量字体处理线程判断当前打印队列是否仅有一个元素,若判断出当前打印队列仅有一个元素,则通过打印队列可读条件变量将该打印线程唤醒,接着判断打印数据是否已经处理完毕,若判断出打印数据已经处理完毕,则设置全局标志位,通知该打印线程在打印工作结束后退出,同时释放互斥锁。
[0128] 可选地,该处理器51,可以具体用于:
[0129] 控制该打印线程从该打印队列中获取打印数据,尝试获取互斥锁,若无法获取互斥锁,则阻塞该打印线程,此时该矢量字体处理线程占用互斥锁,直到该矢量字体处理线程主动释放互斥锁,唤醒该打印线程;
[0130] 控制该打印线程判断该打印队列是否为空,可以包括:
[0131] 控制该打印线程判断该打印队列是否为空,若判断出该打印队列不为空时,则该打印线程从该打印队列头取出打印数据并执行打印操作,该打印线程接着判断当前打印队列是否仅剩一个空位,若判断出当前打印队列仅剩一个空位,则该打印线程通过打印队列可写条件变量唤醒该矢量字体处理线程,该打印线程接着判断打印数据是否处理完成的全局标志位的状态,根据该全局标志位的状态来决定是否退出打印线程,在判断出打印数据是否处理完成的全局标志位的状态是处理完成时,该打印线程在打印工作结束后退出,同时释放互斥锁;
[0132] 控制该打印线程判断该打印队列是否为空,若判断出该打印队列为空时,则阻塞该打印线程,通过打印队列可读条件变量等待该矢量字体处理线程唤醒,直到该矢量字体处理线程唤醒并释放互斥锁,则该打印线程从该打印队列头取出打印数据并执行打印操作,该打印线程接着判断当前打印队列是否仅剩一个空位,若判断出当前打印队列仅剩一个空位,则该打印线程通过打印队列可写条件变量唤醒该矢量字体处理线程,该打印线程接着判断打印数据是否处理完成的全局标志位的状态,根据该全局标志位的状态来决定是否退出打印线程,在判断出打印数据是否处理完成的全局标志位的状态是处理完成时,该打印线程在打印工作结束后退出,同时释放互斥锁。
[0133] 可以发现,以上方案,POS机可以将矢量字体的处理和打印过程分解成矢量字体处理线程和打印线程共两个相互独立的线程,进而同步该矢量字体处理线程和该打印线程,进而在该矢量字体处理线程处理完矢量字体数据后,控制该矢量字体处理线程将打印数据放置到打印队列,进而控制打印线程打印该打印队列的信息,能够实现POS机引入多线程同步机制优化矢量字体打印方式,打印流畅,打印速度快。
[0134] 进一步的,以上方案,POS机可以备份打印队列,能够实现POS机能备份打印队列,在需要应用到该打印队列时,能从该备份数据中还原出该打印队列,方便用户使用该打印队列,提高了用户体验。
[0135] 在本发明所提供的几个实施方式中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施方式仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0136] 作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施方式方案的目的。
[0137] 另外,在本发明各个实施方式中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0138] 集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施方式方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0139] 以上所述仅为本发明的部分实施例,并非因此限制本发明的保护范围,凡是利用本发明说明书及附图内容所作的等效装置或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。