如何在 c++ 中延迟?

How to delay in c++?

本文关键字:延迟 c++      更新时间:2023-10-16

我正在开发一个依赖于四个ARuco标记的康复应用程序,我需要绘制运动序列中的四个标记,即物体出现在第一个标记上,当患者的手到达物体时,它会移动到下一个标记,等等......我可以通过选择其标记 ID 来绘制第一个标记,现在我需要延迟绘制下一个标记,这是代码:

std::vector<int> ids;
std::vector<std::vector<cv::Point2f> > corners;
cv::aruco::detectMarkers(image, marker_dict, corners, ids);
// Draw markers using opencv tool
cv::aruco::drawDetectedMarkers(mid, corners, ids);
// Draw markers custom
for (size_t i = 0; i < corners.size(); ++i)
{
// Convert to integer ponits
int num = static_cast<int>(corners[i].size());
std::vector<cv::Point> points;
for (size_t j = 0; j < corners[i].size(); ++j)
points.push_back(cv::Point(static_cast<int>(corners[i][j].x), static_cast<int>(corners[i][j].y)));
const cv::Point* pts = &(points[0]);

// Draw

if (ids.at(i) == 45) {
cv::fillPoly(right, &pts, &num, 1, cv::Scalar(255, 0, 0));
}

使用 std::chrono 库来测量经过的时间,当您所需的延迟过去时,在那个时间执行您想要的代码。

下面是一个使用 while 循环的简单示例,该循环检查是否已经过去了 100 毫秒

#include <windows.h>
#include <iostream>
#include <chrono>
int main()
{
using Clock = std::chrono::steady_clock;
std::chrono::time_point<std::chrono::steady_clock> start, now;
std::chrono::milliseconds duration;
start = Clock::now();
while (true)
{
now = Clock::now();
duration = std::chrono::duration_cast<std::chrono::milliseconds>(now - start);
if (duration.count() >= 100)
{
//do stuff every 100 milliseconds
start = Clock::now();
}
}
return 0;
}

也不需要睡觉。

您可以使用标题 chromo 和 thread。 在函数之后,你可以把 sleep((;括号中带有秒数的任何位置。您可以使用小数和整数。

#include <iostream>
#include <chromo>
#include <thread>
void sleep(float seconds){
clock_t startClock = clock();
float secondsAhead = seconds * CLOCKS_PER_SEC;
// do nothing until the elapsed time has passed.
while(clock() < startClock+secondsAhead);
return;
}
int main(){
sleep(2); 
cout << "Hello " << endl;
sleep(2.5);
cout << "World!" << endl;
return 0;   
}