我在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會盡可能快地將它推送到管道。 –