2009-06-08 107 views
6

說,我需要運行一堆容易崩潰的代碼,所以我需要在不同的進程上運行它。通常,我會做這樣的:在Qt4應用程序中使用「fork()」的便攜方式?

pid = fork(); 
    if (pid == -1) { 
    std::cout << "Cant Spawn New Thread"; 
    exit(0); 
    } else if (pid == 0) { 
    std::cout << "Im a child that will crash\n"; 
    char *foo = (char *) 0xffff; 
    std::cout << foo; 
    exit(0); 
    } else { 
    std::cout << "PID: " << pid << "\n"; 
    } 
    do { 
    std::cout << "Waiting for " << pid << " to finish .. \n"; 
    pid_w = waitpid(pid,&status,0); 
    } while (pid_w == -1); 

很顯然,我可以只用叉子在我的Qt4應用程序,但我不知道是否我可以存檔與Qt4的提供的任何東西或任何可移植的方式,而不訴諸相同的功能有一堆建築#ifdefs

無論如何,我的目標只有pthread這個應用程序的實現,但我仍然想盡可能接近「本地」Qt API。

我測試過QThread,並在線程顯然段錯誤崩潰的整個應用程序,它似乎是QProcess只管產卵完全不同的可執行文件時使用。任何其他的選擇?

+3

你知道Qt論壇在http://qtcentre.org嗎?您也可以在irc.freenode.net上的#qt頻道上提問,以防萬一您在這裏沒有得到您的答案。 – 2009-06-08 23:56:06

+0

我曾嘗試從qtcentre的維基搜索可能的例子,但沒有發現任何,我將#qt下降的今天晚些時候propably =) – rasjani 2009-06-09 06:29:24

回答

7

的Windows平板出沒有在任何公開耗材方式fork()的,所以沒有Qt的通話效仿;你需要做一些事情,比如用特殊的命令行參數或其他東西來開始。

1

您是否嘗試過的try ... catch語句&搞清楚如何避免崩潰????

+1

很抱歉,但它不是一個選項,即崩潰*如果想應該只是*崩潰的代碼我的應用程序應該抓住這一點,並繼續保持滴答作響而不會崩潰。 – rasjani 2009-06-08 21:49:13

3

我覺得你應該去QtConcurrent,因爲它是最高層API在Qt的可用多線程編程。這樣你的代碼將變得更簡單和更清晰。
由於這是一個高層次的API,這是對的底層API頂部可能實現的,你已經嘗試過那麼這也可能不會解決你的問題,但是。

0

你可以嘗試QThread也。它比QtConcurrent更舊,可能不太方便。它不會自動調整CPU上的內核數量,因此不會平均分配工作負載。不過,它可能是最接近的fork()的Qt模擬器,儘管它不是一個簡單的替代品,並且可能對您更好。 QThread和QtConcurrent都可以跨平臺移植。

相關問題