我正在使用带有嵌入式Linux(C)的ARM处理器。我的主程序必须执行实时操作,并在一段时间后(由主程序确定)我必须通过蓝牙连接将数据发送到Android平板电脑。
我想将蓝牙数据传输外包给POSIX线程。在main函数中,我现在要触发Thread来执行数据发送。那么我怎么能'重启'一个线程,因为它应该只在主要功能必须通过蓝牙发送数据?这就是为什么它也没有帮助在Thread函数中有一个循环(与sleep函数结合),因为正如我已经说过的,时间由main函数决定,而不是Thread函数本身。
那么有没有重启线程的选项?或者,如果有人有更好的想法来解决这个问题,我愿意接受它。 :)
答案 0 :(得分:5)
最简单的是使用同步例程。想到了信号量:
thread() {
for (;;) {
sem_wait(&semaphore);
send_data(...);
}
}
main() {
get_data();
pus_data_in_a_buffer();
sem_post(&semaphore);
// ...
}
但是,如果您只需异步发送数据,则可能需要查看异步IO库aio(7)。
答案 1 :(得分:0)
您可以只进行线程循环,检查发送缓冲区是否已准备好发送,然后如果未准备就暂停。虽然不是每种情况都不理想,但你当然可以让线程保持循环并等待某些事情发生。
请注意,这对每种情况都不实用,但是因为您已经提到它是一个实时场景,这可能是保持峰值性能的最佳选择,因为信号量可能有些昂贵(就处理时间而言) )。如果您不需要这样的优化,那么使用信号量可能更安全。