相关疑难解决方法(0)

你能使用标准的c ++/c ++ 11实现一个没有"睡眠"的计时器吗?

我有以下代码(手工复制):

// Simple stop watch class basically takes "now" as the start time and 
// returns the diff when asked for.
class stop_watch {...}

// global var
std::thread timer_thread;

void start_timer(int timeout_ms)
{
    timer_thread = std::thread([timeout_ms, this](){
        stop_watch sw;
        while (sw.get_elapsed_time() < timeout_ms)
        {
            // Here is the sleep to stop from hammering a CPU
            std::this_thread::sleep_for(std::chrono::milliseconds(10));
        }

        // Do timeout things here...
        std::cout << "timed out!" << std::endl;
    })
}
Run Code Online (Sandbox Code Playgroud)

我不想太沉迷于我写的课程的细节,所以这是一个非常简化的版本.完整的类调用函数回调并具有取消计时器等的变量...

我只想专注于"睡眠"部分.我可以在没有睡眠的情况下实现这样的事情,还是有更好的方法来实现它? - 还是睡得很好? - 我认为睡眠通常是糟糕设计的标志(我已经读过几个地方)......但我想不出一种方法来实现没有一个计时器:(

附加说明:计时器应该能够随时停止/唤醒.只是为了清晰起见而添加它,因为它似乎影响了要采用的解决方案.在我的原始代码(不是这个代码片段)中,我使用了一个可以突破循环的原子bool标志.

c++ timer c++11

32
推荐指数
2
解决办法
4155
查看次数

线程在Linux中暂停的最短时间

在我的应用程序中,线程需要暂停一段时间(100个时钟周期).暂停的一种方法是调用nanosleep,但我想它需要对内核进行系统调用.现在我想暂停而不去内核.

请注意,我有足够的内核来运行我的线程,并且我将每个线程绑定到一个单独的内核,因此即使是可以暂停内核一段时间的指令也会很好.我正在使用x86.我只是希望线程在暂停时暂停.我不希望繁忙的循环或系统调用内核.是否有可能做到这一点?我可以暂停一个帖子的最短时间是多少?

c linux multithreading multicore

8
推荐指数
1
解决办法
6967
查看次数

WaitForSingleObject是否放弃线程的时间片?

我正在C中制作win32程序.

当您运行多个线程,并且其中一个线程正在等待事件时(WaitForSingleObject()例如使用),该线程是否仍然获得其完整的CPU时间片?

换句话说,操作系统是否知道线程不需要其时间片,直到其中一个事件被发出信号?

windows winapi multithreading win32-process

5
推荐指数
1
解决办法
2031
查看次数

标签 统计

multithreading ×2

c ×1

c++ ×1

c++11 ×1

linux ×1

multicore ×1

timer ×1

win32-process ×1

winapi ×1

windows ×1