【问题标题】:Run two function simultaniously (at the same time) in C++在 C++ 中同时(同时)运行两个函数
【发布时间】: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


【解决方案1】:

在计算机理论中没有真正的“同时”。 常见的方法是使用线程。这些线程执行、停止、切换的速度非常快,看起来就像是同时执行的。

但是仍然有一些事情可以做错,这使得线程的使用比不使用它们更糟糕。

所以我想说首先了解一些关于线程的知识(请参阅链接:https://doc.qt.io/qt-5/qthread.html)并创建 2 个线程,每个通道一个线程并在那里完成您的工作。

【讨论】:

  • 在多核机器上,可以公平地说,至少有一些线程实际上是同时运行的(每个核心一个)
  • 嗯,有趣!
猜你喜欢
  • 1970-01-01
  • 2017-07-26
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多