m0_63572190 2023-03-15 19:25 采纳率: 76.9%
浏览 20
已结题

线程1发出信号,线程2进行判断(判断有没有收到包),然后解码(10进制转16进制含浮点数),然后解码(10进制转16进制含浮点数,如何解决?

线程1发出信号,线程2进行判断(判断有没有收到包),然后解码(10进制转16进制含浮点数),写数据库,需要代码

import copy
import threading
from PyQt5.QtCore import pyqtSignal, QObject
from Sql import sql
import time
import traceback
from FormatConvert import FormatConvert
class myThread2 (QObject,threading.Thread):
    DataReady_recv = pyqtSignal(list)
    def __init__(self, name):
        QObject.__init__(self)
        threading.Thread.__init__(self)
        self.name = name
        #数据库
        self.sql=sql()
        self.FormatCon = FormatConvert()
    def data_decoding(self,data1):
        write_data=[]
        print("接收到数据:"+data1)
        table_name='device_info'+data1[0:1]
        disu = self.FormatCon.int64_to_float(int(data1[2:10],16))
        write_data.append(disu)
        yuliang  = self.FormatCon.int64_to_float(int(data1[11:19], 16))
        write_data.append(yuliang)
        if data1[-2:] == '01':
            status = "正常"
        else:
            status = "异常"
        write_data.append(status)
        self.sql.insert_device_info_table(table_name,write_data)

#self.data2=[{'node': '2', 'lon': 114.4198, 'lat': 30.5186}, {'node': '2', 'lon': 114.4198, 'lat': 30.5186}]

    def run(self):

        while True :
            #收到数据了
            print()
#这里进行判断
if __name__ == "__main__":
   
#这里进行解码,写数据库(类似下面这个)
thread1=myThread2("thrad2")

     print(".....1")
   
    # thread1.creatable(s)
    s2={'node_name': 'lora_node3', 'data': 'AAAA0312013BD1E442BC34F441CDCC4C3DDA5555'}
    s={'node_name': 'lora_node18', 'data': '"/a14FBbBQKgS/lora_node18/user/update"\r\nAAAA03250214021B1021101327E1BFD78D7ABE952BF64003B9FB430550A23FD792FC43641EA141E4BD75403F3BD1E442BC34F4414C5555'}

    s3 = {'node_name': 'lora_node18',
         'data': '"/a14FBbBQKgS/lora_node18/user/update"\r\nAAAA03020215030C0E2001410BBE3E752F85BEC2DC87C2FC8A3DC10000000000000000073B8D4133698640BA5555'}
    s4={'data': 'AAAA03020215030C0E1F345960BD3E76CC00BF4E5B75C2DA0745C10000000000000000073B8D41997486403F55',

     'node_name': 'lora_gateway'}
    s5={'data': 'AAAA03020215030C0E1F36E0FEBB3ECA6E00BF289684C212FD42C10000000000000000073B8D41A46B8640AB55',
     'node_name': 'lora_gateway'}

     thread1.data_check(s5)


    thread1.data_decoding(s3)
  • 写回答

1条回答 默认 最新

  • EnveRae 2023-03-15 19:39
    关注

    可以使用线程同步机制来实现线程1和线程2之间的通信,并使用适当的算法来完成十进制到十六进制的转换,包括浮点数的转换。

    一种可能的实现方式如下:

    在线程1中,使用信号量或条件变量来通知线程2有新的包需要处理。当线程1发送信号时,它可以将包的数据存储在共享的缓冲区中。

    在线程2中,等待信号量或条件变量的触发,以判断是否有新的包需要处理。如果有,它可以读取缓冲区中的数据,并进行解码。

    对于十进制转换为十六进制的部分,可以使用标准的算法来实现,如除以16取余数并逆序排列。对于浮点数的转换,可以使用IEEE 754标准中的算法来实现。

    可以使用共享内存或者其他线程间通信机制来进行线程之间的数据传输和共享。

    需要注意的是,线程同步和共享数据可能会导致一些并发问题,例如竞态条件和死锁。因此,在设计和实现多线程程序时,需要仔细考虑并发问题,并使用适当的同步机制来确保线程安全。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月20日
  • 修改了问题 3月18日
  • 修改了问题 3月15日
  • 创建了问题 3月15日

悬赏问题

  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上
  • ¥15 提问一个关于vscode相关的环境配置问题,就是输入中文但是显示不出来,代码在idea可以显示中文,但在vscode不行,不知道怎么配置环境
  • ¥15 netcore使用PuppeteerSharp截图
  • ¥20 这张图页头,页脚具体代码该怎么写?
  • ¥15 关于#sql#的问题,请各位专家解答!
  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂