簡體   English   中英

在Qt4應用程序中“fork()”的便攜方式?

[英]Portable way to “fork()” in Qt4 application?

說,我需要運行一堆容易崩潰的代碼,所以我需要在不同的進程上運行它。 通常我會這樣做:

  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應用程序中使用fork,但我想知道是否可以將任何Qt4提供的任何內容或任何可移植的方式存檔相同的功能而無需使用一堆架構#ifdefs

無論如何,我的目標是這個應用程序只有pthread實現,但我仍然希望保持盡可能接近“本機”Qt API。

我已經測試了QThread ,並且線程中的segfaulting顯然崩潰了整個應用程序,似乎QProcess只針對產生完全不同的可執行文件時使用。 還有其他選擇嗎?

Windows flat-out沒有任何公共消費方式的fork(),因此沒有Qt調用來模擬它; 你需要做一些事情,比如開始使用特殊的命令行參數或其他東西。

我認為你應該選擇QtConcurrent,因為它是Qt中最高級的多線程編程API。 這樣您的代碼將更簡單,更清晰。
由於這是一個高級API,它可能是在您已經嘗試過的低級API上實現的,因此這可能無法解決您的問題。

您是否嘗試過嘗試...捕捉語句並弄清楚如何避免崩潰????

您也可以嘗試QThread 它比較舊,並且可能不如QtConcurrent便利。 它不會自動調整CPU上的核心數,因此不會均勻分配工作負載。 盡管如此,它可能是與fork()最接近的Qt模擬器,雖然它不是替代品,但可能對你更好。 QThread和QtConcurrent都可以跨平台移植。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM