C++ 如何在linux中重复一个进程(或设置一个进程周期)?

C++ 如何在linux中重复一个进程(或设置一个进程周期)?,c++,linux,timer,clock,C++,Linux,Timer,Clock,我有一个做某事的过程,需要在1毫秒后重复。如何在linux上设置进程的周期 我在英特尔i7-2600处理器(共8核)@3.40GHz上使用linux 3.2.0-4-rt-amd64(带有rt抢占补丁)。 基本上,我在代码中显示的while循环中有大约6个线程,我希望每1ms执行一次线程。最后,我想测量每个线程的延迟 那么如何设置周期1ms呢 例如,在下面的代码中,如何在每1ms后重复Task1 while(1){ //Task1(having threads) } 多谢各位 阅读

我有一个做某事的过程,需要在1毫秒后重复。如何在linux上设置进程的周期

我在英特尔i7-2600处理器(共8核)@3.40GHz上使用linux 3.2.0-4-rt-amd64(带有rt抢占补丁)。 基本上,我在代码中显示的while循环中有大约6个线程,我希望每1ms执行一次线程。最后,我想测量每个线程的延迟

那么如何设置周期1ms呢

例如,在下面的代码中,如何在每1ms后重复Task1

while(1){

   //Task1(having threads)

}
多谢各位

阅读

一毫秒实际上是一段很短的时间。(你不能忍受10毫秒的延迟吗?)。我不确定普通笔记本电脑硬件上普通Linux上的常规进程是否能够可靠地处理如此短的时间。也许您需要或至少需要实时调度(请参阅和),也许还需要一个最近特别配置的3.x内核

您无法确定您的处理(在循环内)是否小于一毫秒

您应该解释应用程序在做什么,以及循环中发生了什么

您可能有一些事件循环,考虑使用,(参见……)和/或,/P> (我会使用

ppoll
timerfd\u create
尝试一些东西,但我会接受跳过一些毫秒刻度)

您应该告诉我们更多关于您的硬件和内核的信息。我甚至不确定我的桌面i3770K处理器华硕P8Z77V主板(3.13.3
PREEMPT
Linux内核)是否能够可靠地处理一毫秒的延迟

(当然,一个简单的循环只要调用
clock\u nanosleep
,或者更好的是,使用
timerfd\u create
ppoll
,通常就可以完成这项工作。但这并不可靠……

在while循环中调用
usleep(1000)
就可以完成这项工作,即:

while (1) {
    // Task1
    usleep(1000); // 1000 microseconds = 1 millisecond
}
编辑

由于
usleep()
已经被弃用,取而代之的是
nanosleep()
,让我们使用后者:

struct timespec timer;
timer.tv_sec = 0;
timer.tv_nsec = 1000000L;

while (1) {
    // Task1
    nanosleep(&timer, NULL);
}

您是否考虑过使用crontab?到目前为止您研究/尝试了什么?使用sleep(),有关详细信息,请参阅man 3 sleep。@EmilCondrea crontab持续1毫秒?你是认真的吗?@arco444:我开始了解clock_nanosleep(),taks1可以在执行后休眠,直到达到1ms,然后可以重复该过程。但我不想让task1睡觉。谢谢。它可能不够可靠。而且,
usleep
已经过时,并从Posix 2008中删除了。@BasileStarynkevitch您对弃用的看法是对的,先生<代码>纳米睡眠()应改为使用。关于可靠性,我想这取决于作者需要多精确。上面的答案仍然与您更新的问题相关。你仍然应该解释为什么你想要一毫秒的周期。你的应用程序到底在做什么?循环内发生了什么(除了毫秒等待)?