2012-04-21 101 views
3

我開發Qt的Symbian的應用,其中我有我的應用程序內重新啓動我的應用程序,都習慣了。它在模擬器上工作正常,但不在設備上,它關閉但不能自行重新啓動,我必須自己重新啓動它,還有什麼我必須做的,以使其在設備上工作。應用程序不重新啓動的設備在Qt

+2

你嘗試顛倒這兩行的順序嗎? – Mat 2012-04-21 09:32:56

+0

@Mat是的,但同樣的問題.. :( – abhishek 2012-04-21 09:54:11

+0

你使用什麼設備?也許有你的設備的具體選項。我建議你試試在另一個設備上 – 2012-04-21 10:35:29

回答

2

一個解決方案是創建一個小的控制檯進程,您可以在關閉它之前從主程序啓動它。然後這個控制檯進程將啓動你的程序並關閉。 我一直在使用這種進程來跟蹤我的應用程序,並在崩潰時重新啓動它們。

+0

能否請您提供一些代碼片斷 – abhishek 2012-04-23 11:15:03

1

一個小而基本的東西:在Symbian上有一個仿真器而不是模擬器。不同之處在於後者模擬裝配級別的裝置,而前者僅在API支持級別上進行。例如,iPhone模擬器在組裝級別模擬手機。相反,在Symbian中,底層的API實現對於ARM和WINS體系結構可能是完全不同的。特別是在你像退出應用程序一樣與操作系統交互的情況下。

Symbian上的應用程序退出操作最終通過拋出一個特殊的異常(我不記得它的名字,類似於KExitException)來實現,該異常被Active Scheduler循環捕獲,告訴內核關閉進程。換句話說,這意味着它是一個同步調用。如果你第一次打電話quit然後startProcess那麼後者將永遠不會執行。不清楚爲什麼在你第一次調用startProcess然後quit時它不起作用:這可能是一個異步調用,在你退出之前無法完成,或者你簡單的在兩個實例中不能啓動相同的(GUI)應用程序。無論如何檢查返回值startProcess看它是否成功。

您的最終解決方案是按照@Riho的建議創建看門狗進程。您在致電quit之前啓動看門狗過程,在看門狗主功能中,您等待幾秒鐘並重新啓動應用程序。您將需要SwEvent功能來滿足您的看門狗。

0

我與QProcess中(試過),它似乎是工作的罰款在main.cpp中(仍在測試的內存和線程問題)

我寫這篇文章的代碼(這是我從其他環節有)

int main(int argc, char *argv[]) 
{ 
    #define RESTART_CODE 1000 

    int return_from_event_loop_code; 
    QPointer<QApplication> app; 
    QPointer<MainWindow> main_window; 
    do 
    { 
     if(main_window) delete main_window; 
     if(app) delete app; 

     app = new QApplication(argc, argv); 
     main_window = new MainWindow; 
     QList<QString> lang = AppStatus::getCurrentLanguage(); 
     QTranslator translator; 
     translator.load(lang.at(0)); 
     app->installTranslator(&translator); 
     main_window->setOrientation(MainWindow::ScreenOrientationLockPortrait); 


#if defined(Q_OS_SYMBIAN) 
     main_window->showMaximized(); 
#else 
     main_window->show(); 
#endif 

     return_from_event_loop_code = app->exec(); 
    } 
    while(return_from_event_loop_code==RESTART_CODE); 

    return return_from_event_loop_code; 
} 

並在我的方法從我必須重新啓動我的應用程序我寫了這個。

QProcess::startDetached(qApp->applicationFilePath(),qApp->arguments()); 
qApp->exit(RESTART_CODE); 

而我的應用程序正在重新啓動,就像我想..如果任何更改nedded plese讓我知道。

+0

它顯示。?。「線程0x740已經慌類別:WSERV;原因:41」的錯誤在設備上的應用程序重新啓動後,但不立即,應用程序啓動正常,但當我打開它與上述錯誤崩潰其他一些屏幕。 – abhishek 2012-04-24 08:06:20

+0

'另外,QProcess :: startDetached'很可能甚至沒有做任何事情,重啓似乎是完全由於循環。所以,你應該有QProcess中相同的結果。也許你可以通過在循環外部創建它並保持相同的'QApplication'實例,並創建,顯示和刪除只有主窗口e循環。 – alexisdm 2012-04-24 10:59:46

+0

@alexisdm它運行正常第一次,但如果我再次調用該方法就說明線程慌了錯誤 – abhishek 2012-04-24 12:25:12

相關問題