[英]C pthreads: Start a Thread from main
我正在使用带有嵌入式Linux(C)的ARM处理器。 我的主程序必须执行实时操作,并在一段时间后(由主程序确定)我必须通过蓝牙连接将数据发送到Android平板电脑。
我想将蓝牙数据传输外包给POSIX线程。 在main函数中,我现在要触发Thread来执行数据发送。 那么我怎么能'重启'一个线程,因为它应该只在主要功能必须通过蓝牙发送数据? 这就是为什么它也没有帮助在Thread函数中有一个循环(与sleep函数结合),因为正如我已经说过的,时间由main函数决定,而不是Thread函数本身。
那么有没有重启线程的选项? 或者,如果有人有更好的想法来解决这个问题,我愿意接受它。 :)
最简单的是使用同步例程。 信号量浮现在脑海中:
thread() {
for (;;) {
sem_wait(&semaphore);
send_data(...);
}
}
main() {
get_data();
pus_data_in_a_buffer();
sem_post(&semaphore);
// ...
}
但是,如果您只需要异步发送数据,您可能需要查看异步IO库aio(7) 。
您可以只进行线程循环,检查发送缓冲区是否准备好发送,然后如果没有准备就暂停。 虽然不是每种情况都不理想,但你当然可以让线程保持循环并等待某些事情要做。
请注意,这对于每种情况都不实用,但是因为您已经提到它是实时场景,这可能是保持峰值性能的最佳选择,因为信号量可能有些昂贵(就处理时间而言)。 如果您不需要这样的优化,那么使用信号量可能更安全。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.