[英]How to delay in c++?
我正在開發依賴於四個 ARuco 標記的康復應用程序,我需要在鍛煉序列中繪制四個標記,即 object 出現在第一個標記上,當患者的手到達 object 時,它會移動到下一個標記, ETC... 。 我可以通過選擇其標記 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。 function之后,可以放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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.