我在C中编写了一个等待事件的程序,然后通过system()
函数运行外部系统命令。C中的快速生产者/慢速消费者
while(true){
wait_for_event();
system("cmd");
}
我对此有seriuos问题,cmd
是一个沉重的命令,并需要几秒钟才能完成,我的应用程序错过这一时间框架的一些事件。
所以我决定移动system
功能,这是非常沉重的,到另一个程序,所以我改变了我的程序如下:
while(true){
wait_for_event();
write_to_fifo("cmd");
}
并写了另一个程序:
while(true){
system(read_from_pipe());
}
但它并没有帮助,因为如果生产者(第一个程序)比消费者(第二个程序)写得更快,那么消费者会遗漏一些数据!
有什么办法可以解决这个问题吗?
使用线程捕获事件,将它们添加到队列中,并让您的消费者从该队列中拉出。 – Falmarri
是否可以使用多个线程来减轻消费者的负担,同时让生产者单线程?当然,这是一场失败的战斗,但根据你的要求,它可能足以救你。如果额外线程仍然过多,您还应该查看数据存储。 – pickypg
你如何设置你的管道?当然,如果您持续获得的数据超过您的处理数量,那么某些内容将“给予”。但是完全有可能使用管道来缓慢处理大量数据。否则,它将无法执行'cat myprog.c | gcc -o myprog' - 它确实 - gcc有时非常慢,cat会尽可能快地将它推送到管道。 –