import threading import time import modulecommpython import numpy as np import ctypes modulelock = threading.Lock() nThread = 0 class PyModuleComm: def __init__(self,strname): # 初始化代码... checklib=ctypes.CDLL('./libchecklicence.so') a=checklib._ZN12Checklicence12CheckLinceseEv() if a != 1: exit(0) print("name: ",strname) self.strmemname = strname self.mbRegister = False global nThread nThread = nThread+1 self.mnMode = 0 print("nThread = ",nThread) self.obj = modulecommpython.get_ca_object() pass def RegisterRecv(self,call): if self.mbRegister: print(" Have register, can't register other.") return print("Register: ",self.strmemname) self.mpcall = call self.mbRegister = True self.mbRun = True self.mpthread = threading.Thread(target=self.threadrecvdata, args=(self.strmemname,)) self.mpthread.start() print("complete create thread.") self.mnMode = 1 self.obj.RegisterRecv(self.strmemname) def RegiseterSend(self,nSize,nPacCount): if self.mbRegister: print(" Have register, can't register other.") return print("Register: ",self.strmemname) self.mnsize = nSize self.mnPacCount = nPacCount self.mbRegister = True self.mnMode = 2 self.obj.RegisterSend(self.strmemname,nSize,nPacCount) def SendData(self,arr,nsendsize): # nrealsize = np.zeros(1, dtype=np.int32) nrtn = self.obj.SendData(arr,nsendsize) def threadrecvdata(self, arg): # 这个函数将被线程执行 # print(f"线程开始执行,参数是 {arg}") nBuffSize = int(1000) arr = np.zeros(nBuffSize,dtype=np.int8) recvtime = np.zeros(1,dtype=np.int64) nrealsize = np.zeros(1,dtype=np.int32) while 1: nrtn = self.obj.RecvData(arr,nBuffSize,nrealsize,recvtime) if nrtn > 0: self.mpcall(arr,nrtn,recvtime) else: pass if nrtn < 0: nBuffSize = int(nrealsize[0] * 2) arr = np.zeros(nBuffSize,dtype=np.int8) else: time.sleep(0.001) print("threadrecvdata complete.") def stop_thread(self): self.mbRun = False self.mpthread.join() def start_thread(self, arg): # 创建线程对象,target参数指向要在线程中运行的函数 self.mbRun = True self.mpthread = threading.Thread(target=self.my_function, args=(arg,)) # 启动线程 self.mpthread.start() # 可以在这里添加其他代码,主线程会继续执行 print("主线程继续执行...") # 如果需要等待线程结束,可以调用 join() 方法 # thread.join()