C++ 使用clock()函数调度任务时出现问题

C++ 使用clock()函数调度任务时出现问题,c++,scheduled-tasks,precision,clock,C++,Scheduled Tasks,Precision,Clock,我希望以不同的时间间隔安排任务:0.1秒、0.9秒。。。。2s等 我使用时钟()C++函数,它返回模拟开始以来的滴答数,并且我用CcLoSsSpRySSEC将时钟号转换成秒,但是我注意到,当这个时刻是浮点时,任务并没有被调度,但是当它是整数时,它就不会被调度。这里是负责调度的代码部分: float goal = (float) clock() / CLOCKS_PER_SEC + 0.4 ; // initially (float) clock() / CLOCKS_PER_SEC = 0 ;

我希望以不同的时间间隔安排任务:0.1秒、0.9秒。。。。2s等 我使用时钟()C++函数,它返回模拟开始以来的滴答数,并且我用CcLoSsSpRySSEC将时钟号转换成秒,但是我注意到,当这个时刻是浮点时,任务并没有被调度,但是当它是整数时,它就不会被调度。这里是负责调度的代码部分:

float goal = (float) clock() / CLOCKS_PER_SEC + 0.4 ;  // initially (float) clock() / CLOCKS_PER_SEC = 0 ; 
if ((float) clock() / CLOCKS_PER_SEC == goal) 
     do stuff ; 

在这种情况下,它不起作用,但当我计划在3秒钟内完成任务时,它就起作用了。这是精度问题吗

每秒时钟数在系统中是整数。在其他系统中,它也可以是浮动的。将(float)也放在它附近

问题可能是因为您的浮点比较。这可能会产生意想不到的结果。请避免这种情况


<链接> < /p>

如果我在C++中实现了一些定时器机制,我可能会使用./P> 上面的示例将打印:

hello from foo hello from bar::hello Done! 福先生你好 酒吧里的你好 完成! 每两秒钟打印一行。在
“完成!”
之后,程序将永远循环,什么也不做


请注意,此程序包含大量C++11功能,但已使用GCC4.4.5和4.7.1进行了测试。不幸的是,VC++2010没有
标题,但VC++2012RC显然有它。

如果您想使用小于秒的分辨率,那么
时钟
不是一个好的函数。我建议改为使用
gettimeofday
。您可能不想在这里使用
=
。如果由于某种原因,您的流程进入睡眠状态的时间刚刚够长,以至于无法实现您的
目标,会发生什么情况?可能应该使用
=
代替。感谢您的回复。我不能使用>或>=因为我必须在此时准确地安排任务。注意:您可以使用。谢谢你的回复。在我的例子中,它是一个等于1000000的整数注:@J.F.Sebastian好吧,明天当我有时间时,我会将它转换为使用
std::chrono
。)这很好,但似乎计时器的粒度(检查更新的频率)应该是事件名称空间的一部分,或者整个事情应该封装在一个类中。
void foo()
{
    std::cout << "hello from foo\n";
}

void done()
{
    std::cout << "Done!\n";
}

struct bar
{
    void hello()
    {
        std::cout << "Hello from bar::hello\n";
    }
};

auto now = std::chrono::system_clock::now();
bar b;

events::add(foo, now + std::chrono::seconds(2));

events::add(std::bind(&bar::hello, b), now + std::chrono::seconds(4));

events::add(done, now + std::chrono::seconds(6));

while (true)
{
    usleep(10000);
    events::timer();
}
hello from foo hello from bar::hello Done!