我对实时编程/多线程相当陌生,我正在尝试进行一些实际的开发。我正在尝试为一个学校项目编写一个程序(用 C 语言),该项目执行多项任务,包括图像处理(openCV)、提供网页(使用 libmicrohttpd 等库)以及与外围设备连接。这个程序将是大量线程的,每个任务基本上都是独立运行的。
该程序的一个非常核心的部分是事件/数据记录和设置外围设备上的时钟,这需要计算机的板载时间。也就是说,多个线程将需要当前时间作为其任务的一部分。所以我的问题是,声明一个全局时间结构并在各个线程中需要时调用 gettime 是一个更好的主意,还是有一个始终维护当前时间的单独线程,然后每个线程都从中读取?前者听起来可能存在访问问题,而第二个听起来很难以适当的频率进行更新。
更详细地了解我正在执行的任务:
- 每当 opencv 检测到某个对象时,我都会保存图像和包含时间的文本日志
- 我正在记录从外围设备接收的最后十个数据包的时间(这是一个非常低的数据速率连接)
- 外设没有板载 RTC,因此该程序会在连接或漂移太远时对其进行设置。
感谢您的任何建议。
最佳答案
最好的选择是使用线程安全的时间 getter 。 gettimeofday
就是这样一个函数(参见此处: Is the gettimeofday function thread safe in Linux? )。它为您提供了自 UNIX 纪元以来的秒数和微秒数,因此对于日志记录来说应该足够准确。只要您不使用任何具有内部缓冲区等的函数,您如何处理从该函数中获得的数据取决于您。
您还应该注意如何编写日志。最安全的方法是为每个线程使用单独的文件,但您也可以使用互斥锁。
关于c - 为实时时钟提供自己的线程是一个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15603167/