我对实时编程/多线程很陌生,我试图在我的带领下进行一些实际的开发。我试图为一个执行多项任务的学校项目编写程序(在C中),包括图像处理(openCV),服务网页(使用像libmicrohttpd这样的库),以及与外围设备连接。该程序将具有高度线程,每个任务基本上都是独立运行的。
该程序的一个非常重要的部分是事件/数据记录和在外围设备上设置时钟,这需要计算机的板载时间。也就是说,不止一个线程将需要当前时间作为其任务的一部分。所以我的问题是,在单个线程中声明一个全局时间结构并调用gettime是一个更好的主意,或者让一个单独的线程始终保持当前时间,每个线程然后只读取?前者听起来可能有访问问题,而第二种听起来很难以适当的频率更新。
更详细地了解我正在做的任务:
感谢您的任何建议。
答案 0 :(得分:3)
您最好的选择是使用线程安全时间吸气剂。 gettimeofday
就是这样一个功能(见这里:Is the gettimeofday function thread safe in Linux?)。它提供了自unix时代以来的秒和微秒,所以应该很容易准确到记录。只要您不使用任何具有内部缓冲区的函数等,您从该函数中获取的数据取决于您自己。
您还应该注意如何编写日志。最安全的方法是为每个线程使用单独的文件,但您也可以使用互斥锁。
答案 1 :(得分:0)
您说您的设备没有RTC。所以我希望它是一个小型嵌入式平台?如果是这样,几乎总会有一些硬件定时器可用。如果是这样,您可以使用中断或使用胎面来轮询计时器值。并且不要忘记记录时间调整,以便稍后评估它们。