c – C快速生产者/缓慢消费者

前端之家收集整理的这篇文章主要介绍了c – C快速生产者/缓慢消费者前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在C中编写了一个等待事件的程序,然后通过system()函数运行一个外部系统命令.
while( true ){
    wait_for_event();
    system("cmd");
}

我有一个seriuos问题,该cmd是一个沉重的命令,需要几秒钟才能完成,我的应用程序在这个时间框架内错过了一些事件.

所以我决定将系统功能,这是非常重的,移动到另一个程序,所以我改变了我的程序如下:

while( true ){
    wait_for_event();
    write_to_fifo("cmd");
}

并写了另一个程序:

while(true){
    system(read_from_pipe());
}

但是没有帮助,因为如果生产者(第一个程序)的写入速度比消费者快(第二个程序),那么消费者会错过一些数据!

有没有办法处理这个问题?

解决方法

您应该将代码返回到其原始格式 – 即单个程序调用第二个程序 – 除了用popen(3)调用替换系统(3)调用.现在,调用程序可以将来自外部程序的读取行的事件检查的调用进行交织.

Unix管道机制确保缓慢的消费者将导致快速生产者在管道充满时写入时等待.

您可能还想查看fileno(3)函数,结合select(2)或poll(2),以便从外部程序异步读取,从而永远不会阻止调用程序.

猜你在找的C&C++相关文章