2012-01-02 94 views
0

這似乎是一個典型的應用:項目應當掃描背景的音頻文件,並寫入標籤數據庫的 1.一部分。 2.另一部分進行搜索查詢並顯示結果。 應用程序應該是跨平臺的。跨平臺的後臺服務+ GUI

因此,主探測循環,包括將數據添加到數據庫是沒有問題的。問題是: 1.什麼是實施這種背景工作服務的最佳方式? Boost(asio)或Qt(服務框架?)? 2.使用提到的庫來製作本地服務包裝器或使用非gui應用程序模擬它,最好的方法是什麼? 3.我應該將gui連接到服務(它們將如何使用boost或qt進行通信?)或直接連接到數據庫(可以在那裏鎖?)? 4.點1中的分解會消耗所有的CPU使用量嗎?以及如何避免這種情況?如何實現掃描文件較少的CPU消耗品?S

回答

0

我喜歡使用Poco它有一個方便的ServerApplication類,它可以在一個應用程序中使用,可以作爲一個普通的命令行應用程序或作爲Windows服務,或者作爲* nix守護進程而無需觸摸代碼。

如果您使用的是「真正」的數據庫(MySQL和PostgreSQL,SQL服務器),然後從GUI應用程序查詢數據庫可能是罰款,更容易做。如果您使用的其他類型的數據庫不一定是多用戶友好的,那麼您應該使用環回套接字或管道與服務進行通信。

至於CPU使用率,你可以只使用一堆「睡眠」你的代碼,搜索文件,以確保它不會養豬的CPU和IO端口中調用。或者使用某種間隔通知來允許它定期搜索塊。

+0

感謝您的回答。 ServerApplication似乎是我需要的,但是如果Qt提供的服務框架具有相同的功能,那麼它更可取一些(也有GUI,兩個應用程序中的一個lib更好)。你熟悉這種技術嗎?他們是一樣的嗎? – naixx 2012-01-03 09:40:44

+0

2.它是相當隨便的應用程序,所以我打算使用sqlite。使用poco,是否可以連接Qt gui app的服務?似乎,SFW使用Qt的「反射」來訪問服務。就我所知,直接使用sqlite就是阻塞。那麼你會建議像mysql一樣使用smth嗎? 3.因此,ServerApplication中的主循環應該在main()方法中完成,使用sleep就可以了,對吧?或者我可以產生額外的線程?或者,有沒有類似qt的poco中的某種主循環? – naixx 2012-01-03 10:16:46

+0

我從來沒有真正使用Qt服務框架,所以我不能對此發表評論。我傾向於使用Poco來提供服務,因爲我發現Qt是一個相當重的庫,所以我只在需要重用GUI的應用程序中使用它。你當然可以在Poco和Qt之間進行連接,但是在Qt GUI和Qt服務之間進行連接可能會更容易。 – Gerald 2012-01-03 10:31:36