12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- 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()
|