PyModuleCommModule.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import threading
  2. import time
  3. import modulecommpython
  4. import numpy as np
  5. modulelock = threading.Lock()
  6. nThread = 0
  7. class PyModuleComm:
  8. def __init__(self,strname):
  9. # 初始化代码...
  10. print("name: ",strname)
  11. self.strmemname = strname
  12. self.mbRegister = False
  13. global nThread
  14. nThread = nThread+1
  15. self.mnMode = 0
  16. print("nThread = ",nThread)
  17. self.obj = modulecommpython.get_ca_object()
  18. pass
  19. def RegisterRecv(self,call):
  20. if self.mbRegister:
  21. print(" Have register, can't register other.")
  22. return
  23. print("Register: ",self.strmemname)
  24. self.mpcall = call
  25. self.mbRegister = True
  26. self.mbRun = True
  27. self.mpthread = threading.Thread(target=self.threadrecvdata, args=(self.strmemname,))
  28. self.mpthread.start()
  29. print("complete create thread.")
  30. self.mnMode = 1
  31. self.obj.RegisterRecv(self.strmemname)
  32. def RegiseterSend(self,nSize,nPacCount):
  33. if self.mbRegister:
  34. print(" Have register, can't register other.")
  35. return
  36. print("Register: ",self.strmemname)
  37. self.mnsize = nSize
  38. self.mnPacCount = nPacCount
  39. self.mbRegister = True
  40. self.mnMode = 2
  41. self.obj.RegisterSend(self.strmemname,nSize,nPacCount)
  42. def SendData(self,arr,nsendsize):
  43. # nrealsize = np.zeros(1, dtype=np.int32)
  44. nrtn = self.obj.SendData(arr,nsendsize)
  45. def threadrecvdata(self, arg):
  46. # 这个函数将被线程执行
  47. # print(f"线程开始执行,参数是 {arg}")
  48. nBuffSize = int(1000)
  49. arr = np.zeros(nBuffSize,dtype=np.int8)
  50. recvtime = np.zeros(1,dtype=np.int64)
  51. nrealsize = np.zeros(1,dtype=np.int32)
  52. while 1:
  53. nrtn = self.obj.RecvData(arr,nBuffSize,nrealsize,recvtime)
  54. if nrtn > 0:
  55. self.mpcall(arr,nrtn,recvtime)
  56. else:
  57. pass
  58. if nrtn < 0:
  59. nBuffSize = int(nrealsize[0] * 2)
  60. arr = np.zeros(nBuffSize,dtype=np.int8)
  61. else:
  62. time.sleep(0.001)
  63. print("threadrecvdata complete.")
  64. def stop_thread(self):
  65. self.mbRun = False
  66. self.mpthread.join()
  67. def start_thread(self, arg):
  68. # 创建线程对象,target参数指向要在线程中运行的函数
  69. self.mbRun = True
  70. self.mpthread = threading.Thread(target=self.my_function, args=(arg,))
  71. # 启动线程
  72. self.mpthread.start()
  73. # 可以在这里添加其他代码,主线程会继续执行
  74. print("主线程继续执行...")
  75. # 如果需要等待线程结束,可以调用 join() 方法
  76. # thread.join()