线程评级:
  • 0票(s) - 0平均
  • 1
  • 2
  • 3.
  • 4
  • 5
在线程序多线程
# 1
转发,因为我意识到这应该在API部分。

我有2台meca 500,我想在同一时间跑步。为此,我编写了一个同步的多线程函数,在每个线程上调用每个机器人的动作。当我在在线模式下运行时,机器人一次只能移动一个。

是否有可能与多线程和在线编程同步运动,或者我需要做后期处理?

我在下面附上了我的代码。机器人。SafeJM是一个自定义函数,使用MoveJ_test在运行前检查联合移动是否安全。

代码:
类MyThreads:
def __init__(自我、线程):
self.state =[0] *线程
self.threads = []

def RScan(自我,机器人,Rlist t):
我= 0
当i< len(Rlist):
time . sleep (0.001)
如果self.state [t] = = 0:
Robot.SafeJM (Robot.LEDT Rlist[我])
self.state [t] = 1
我+ = 1
如果self.state = = [1] * len (self.state):
self.state = [0] * len (self.state)

# elif self.state[t]==1:
# print('Race prevent ')

def GScan(自我,ESP Rlist t):
我= 0
当i< len(Rlist):
time . sleep (0.001)
如果self.state [t] = = 0:
ESP.patch(“goalposLED Rlist[我])
ESP.get(“zCurrent”)

self.state [t] = 1
我+ = 1
#打印(self.state)
如果self.state = = [1] * len (self.state):
self.state = [0] * len (self.state)

# elif self.state[t]==1:
# print('Race prevent ')


def SyncThreads(自我,有趣,args):
对于range(0,len(args))中的t:

thread = threading.Thread(target=fun[t],args=args[t])
线程。daemon = True
thread.start ()
self.threads.append(线程)

print(线程开始)

对于self.threads中的t:
t.join ()

打印(“做!”)
# 2
是否为每个线程使用不同的Robolink实例?

为了能够在不同的线程上正确地使用API,您应该为每个线程使用一个新的Robolink实例。

一个快速的解决方法是在线程中调用它:
代码:
机器人。link = Robolink()
或者我建议你在启动线程并使用相同的链接检索对象时正确地执行此操作,以便自动分配正确的RDK链接:
代码:
RDK_t1 = Robolink()

机器人= RDK_t1。“机器人”项目(ITEM_TYPE_ROBOT)




浏览此主题的用户:
1客人(年代)