2011-09-08 54 views
1

我正在研究用Ruby編寫的跨平臺GUI桌面應用程序。該應用程序將使用MacRuby在Mac OS X上提供GUI,並將在其他平臺上的GUI上使用Qt。該應用程序是一種多媒體工具,可用於抓取CD或DVD並將其編碼爲各種格式,或將多媒體文件從一種格式轉碼爲另一種格式。Ruby桌面應用程序中的後臺作業

這些任務很耗時,因此必須在後臺運行,以免在執行GUI時凍結GUI。此外,後臺作業應該能夠被取消和/或暫停,並且能夠向GUI報告狀態和進度。可能還需要爲作業分配優先級,以便優先級更高的作業在優先級較低的作業之前運行,並且在作業之間存在依賴關係,以便在所有依賴關係完成之前,作業不會開始執行。

我的問題是:什麼工具或技術最適合在Ruby GUI /桌面應用程序中處理這些背景作業?我不想讓「自己的」工作管理器產生進程或線程,並管理作業的啓動和停止等。

編輯:發佈此問題後,我意識到我已經問了一個非常類似的問題C++解決方案。我對這個Ruby解決方案的要求與我在此發佈的C++解決方案相同:C++ master/worker

+0

MacRuby的好處之一就是您可以使用所有可可類似Grand Central Dispatch的東西嗎? http://en.wikipedia.org/wiki/Grand_Central_Dispatch – coreyward

+0

Grand Central Dispatch爲Mac OS X提供了一種機制,但對其他部署平臺沒有幫助。 –

+0

所以你正在尋找一種能夠跨平臺的工具。我不知道你有多大的可能性,特別是因爲Ruby不如桌面應用程序語言那麼受歡迎。 – coreyward

回答

1

不幸的是,我運行的大多數Ruby後臺作業運行程序都是針對Rails的。

這可能比您想要的要低一點,但想到EventMachine。如果你準備編寫自己的高級Job/Dependency代碼,你可以使用EM來驅動它,並處理線程的骯髒工作(如果你願意,也可以分叉)。不知道暫停...

我會建議看看EventMachine :: Deferrable和EventMachine :: DeferrableChildProcess,看看他們是否可以工作。

+0

EventMachine看起來像可能提供了一個很好的低級機制。我已經在嘗試編寫自己的高級API來管理作業,依賴關係和進度通知。在Mac OS X上,Grand Central Dispatch爲此提供了一個很好的低級機制,但也許EventMachine可以爲其他平臺完成這項工作。我會做一些實驗。謝謝! –

1

我最近使用resque做紅寶石項目的後臺工作。當然,這是一個Rails應用程序,但據我所知,沒有任何東西阻止某人在桌面應用程序中使用它,只要它與MacRuby兼容,並且您不介意安裝Redis。

+0

謝謝。 Resque看起來像是服務器應用程序的一個很好的解決方案,但對於桌面應用程序,我不願意使用需要在最終用戶的計算機上安裝Redis的東西。 –