每隔x秒运行一次功能

时间:2014-09-10 09:54:18

标签: c linux

我每隔x秒运行一次功能有问题。 我的申请:

  1. 创建,绑定套接字,

  2. 听那个插座,

  3. 接受所有传入连接,并为每个连接创建一个新线程,

  4. 发送和接收一些数据,

  5. 现在循环播放应该每1.5秒,5秒和10秒发送一次数据。

  6. 我尝试这样做(其中"时间"时间应以毫秒/纳秒为单位):

    while(true)
    {
        if(fmod(time, 1.5)==0)
        {
            /*sending data*/
        }
        if(fmod(time, 5)==0)
        {
            /*sending data*/
        }
        if(fmod(time, 10)==0)
        {
            /*sending data*/
        }
    }
    

    当我使用time()数据时,每秒发送多次,因为time()精度为1秒。您能否告诉我需要使用哪些功能来获得高精度的时间?

    我使用Linux

    问题2: 如何在线程运行时结束程序(可能通过使用任何键)?

2 个答案:

答案 0 :(得分:2)

1)嗯,要拥有更高分辨率的计时器,您可以使用clock_gettime,可以找到获取实时时钟的示例here

2)我认为这不是一个非常好的设计,为什么不使用一个具有1.5s,5s和10s间隔重新安排的恒定间隔的定时器并执行发送?这样你就不必阻塞主线程,可以等待键盘输入,也可以做任何你需要等待终止的事情。

答案 1 :(得分:1)

  1. 你的方法不是很好。首先 - 您不能使用浮点算术简单地与零进行比较。您应该在返回零的操作中获得0.0000000000001。第二 - 如果你的一个发送冻结一段时间,另一个发送将迟到。最后但并非最不重要 - 在一段时间内循环是浪费CPU。 相反,您可以使用Linux计时器功能和异步IO。

  2. 结束多线程程序的最佳方法是捕获一个信号(SIGINT或SIGTERM或你使用的任何东西)并停止所有线程,释放资源然后退出。