|
@@ -0,0 +1,91 @@
|
|
|
|
+
|
|
|
|
+import threading
|
|
|
|
+import time
|
|
|
|
+
|
|
|
|
+import modulecommpython
|
|
|
|
+import numpy as np
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+modulelock = threading.Lock()
|
|
|
|
+nThread = 0
|
|
|
|
+
|
|
|
|
+class PyModuleComm:
|
|
|
|
+ def __init__(self,strname):
|
|
|
|
+ # 初始化代码...
|
|
|
|
+ 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()
|