C++ 使用线程作为定时器

标签 c++ multithreading sleep thread-sleep

我的项目有一个不同的线程来制作一些东西。

一切都好,但我希望有一些函数每 20 毫秒调用一次(例如),但考虑到该函数花费的时间...我尝试更好地解释...我调用该函数,该函数花费了 6 毫秒退出,所以我希望线程 sleep 14 毫秒(20 - 6),下次调用时,该函数花费 12 毫秒,所以 sleep 将只有 8 毫秒.... 我怎样才能做到这一点? 这是我的代码:

// thread constructor
DWORD dwThreadId, dwThrdParam = 1;  
HANDLE thread = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)workerFunc, &dwThrdParam, 0, &dwThreadId );

// thread function
DWORD WINAPI workerFunc( LPDWORD lpdwParam )
{
    while( true )
    {
        myFunction( );
        Sleep( ??? );
    }
    return 0;
}

谢谢!

最佳答案

这个怎么样:

clock_t start, end;
while( true )
{
    start = clock();
    myFunction( );
    end = clock();
    Sleep(20-(end-start)*CLOCKS_PER_SEC/1000.0);
}

关于C++ 使用线程作为定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6732238/

相关文章:

c++ - 这个重新分配是否正确?

多线程 - 如何调用 Action

multithreading - rust tokio::spawn 在 mutexguard 之后等待

c++ - 如何制定时间条件?

c++ - 一个继承类可以有多少个构造函数?

链接 sfml-audio 时的 C++ undefined reference

java - 我不明白线程在这种情况下是如何工作的

go - Golang信号处理和time.Sleep()交互

java - 每 1 分钟在 for 循环中调用一个命令

c++ - MFC面板和窗口句柄