我正在使用C ++和OpenCV开展机器人项目。在这一步中,我遇到了一个问题,包括:
我有两个方法moveRight()
和moveLeft()
我在我的代码中连续调用,但问题是第二个没有运行,因为第一个需要时间(机器人运动的时间) ),但是当我把Sleep(5000)
放在它们之间时(我猜这五秒就足够了),一切都没问题。
什么是避免使用Sleep
的编程解决方案(因为它会产生一些其他问题)?
答案 0 :(得分:6)
您可以尝试添加layer of indirection。添加要执行的操作队列,将操作排入moveLeft和moveRight,以及其他位置(不同的线程)通过在执行下一个操作之前等待上一个操作完成来正确执行队列中的操作。理想情况下,您需要一种方法来检查操作是否已完成,因此您可以基于事件的方式对其进行编码。
答案 1 :(得分:2)
你永远不应该在机器人中“猜测”。您应该知道,测量您的移动需要多长时间并在代码中使用它。例如,经常调用moveRight()
并让它检查它运行了多长时间。让它在运行时返回true
,并将其用作调用moveLeft()
的条件
答案 2 :(得分:1)
您可以使用计时器,当执行MoveRight()时,将计时器设置为5秒,并在计时器结束后执行Moveleft()。