簡體   English   中英

如何延遲c++?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM