【发布时间】:2020-09-01 12:27:48
【问题描述】:
我正在使用 QT (C++) 对机器人进行编程。 我有一个函数 move_gripper() 可以关闭或打开夹具(取决于参数),还有一个函数 relative_motion() 可以让末端执行器向下移动。我想要做的是在向下移动机器人(调用 relative_motion() 函数)的同时关闭抓手(调用 move_gripper() 函数) 函数的执行时间不一样(假设 move_gripper() 持续 2 秒,而 relative_motions() 持续 3 秒)。我希望这两个函数同时开始执行。
【问题讨论】:
-
这能回答你的问题吗? Simple example of threading in C++
-
QT 的文档非常庞大,因此您必须从那里开始查看(即线程 doc.qt.io/qt-5/threads-technologies.html)
-
线程(如上所述)是一种解决方案,但您也可能希望简化单线程(状态机)方法。在主事件循环中,您将抓手向所需位置移动一小段,然后继续循环处理其他事件。
-
如果你需要两个东西并行运行,那么在两个独立的进程或两个线程中运行这两个东西是显而易见的解决方案。在许多情况下,您还可以使用状态机在任务之间交替。协程是另一种选择。
-
同上 Richard Critten 所说的:除非您的代码正在为电机主动生成 PWM 波形,否则您的代码(或您的代码调用的某个库)可能正在向外部电机控制器发送命令,然后可能观察状态位并等待电机到达目标位置。如果您想协调两个或更多电机的运动,那么在单个线程中完成所有这些可能更有意义。多线程最适合的问题是线程很少需要知道或关心其他线程在做什么的问题。
标签: c++ multithreading qt c++11