【问题标题】:Is it a good idea to give a real time clock its own thread?给实时时钟自己的线程是个好主意吗?
【发布时间】:2013-03-24 19:49:42
【问题描述】:

我对实时编程/多线程还很陌生,我正在努力进行一些实际的开发。我正在尝试为一个学校项目编写一个程序(用 C 语言),该项目执行多项任务,包括图像处理(openCV)、服务网页(使用 libmicrohttpd 之类的库)以及与外围设备的接口。该程序将有大量线程,每个任务基本上都是独立运行的。

该程序的一个非常重要的部分是事件/数据记录和在外围设备上设置时钟,这需要计算机的板载时间。也就是说,不止一个线程将需要当前时间作为其任务的一部分。所以我的问题是,声明一个全局时间结构并根据单个线程的需要调用 gettime 是更好的主意,还是拥有一个始终保持当前时间的单独线程,然后每个线程都从中读取?前者听起来可能存在访问问题,而后者听起来很难以适当的频率更新。

更详细地了解我正在执行的任务:

  • 每当 opencv 检测到某个对象时,我都会保存包含时间的图像和文本日志
  • 我正在记录从外围设备接收到的最后十个数据包的时间(这是一个非常低的数据速率连接)
  • 外设没有板载RTC,所以当它连接或漂移太远时,这个程序会设置它。

感谢您的任何建议。

【问题讨论】:

    标签: c multithreading real-time


    【解决方案1】:

    您最好的选择是使用线程安全的时间获取器。 gettimeofday 就是这样一种功能(参见此处:Is the gettimeofday function thread safe in Linux?)。自 unix 纪元以来,它为您提供秒和微秒,因此应该很容易足够准确地进行日志记录。只要您不使用任何具有内部缓冲区等的函数,您可以如何处理从该函数中获取的数据。

    您还应该注意如何编写日志。最安全的方法是为每个线程使用单独的文件,但您也可以使用互斥锁。

    【讨论】:

      【解决方案2】:

      您说您的设备没有 RTC。所以我期望它是一个小型嵌入式平台?如果是这样,几乎总是有一些可用的硬件计时器。如果是这样,您可以使用中断或使用线程来轮询计时器值。并且不要忘记记录时间调整,以便以后进行评估。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-28
        • 1970-01-01
        • 2012-10-26
        • 1970-01-01
        • 2012-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多