在Qt4应用程序中使用“fork()”的便携方式?

问题描述:

说,我需要运行一堆容易崩溃的代码,所以我需要在不同的进程上运行它。通常,我会做这样的:在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

的Windows平板出没有在任何公开耗材方式fork()的,所以没有Qt的通话效仿;你需要做一些事情,比如用特殊的命令行参数或其他东西来开始。

您是否尝试过的try ... catch语句&搞清楚如何避免崩溃????

+1

很抱歉,但它不是一个选项,即崩溃*如果想应该只是*崩溃的代码我的应用程序应该抓住这一点,并继续保持滴答作响而不会崩溃。 – rasjani 2009-06-08 21:49:13

我觉得你应该去QtConcurrent,因为它是最高层API在Qt的可用多线程编程。这样你的代码将变得更简单和更清晰。
由于这是一个高层次的API,这是对的底层API顶部可能实现的,你已经尝试过那么这也可能不会解决你的问题,但是。

你可以尝试QThread也。它比QtConcurrent更旧,可能不太方便。它不会自动调整CPU上的内核数量,因此不会平均分配工作负载。不过,它可能是最接近的fork()的Qt模拟器,尽管它不是一个简单的替代品,并且可能对您更好。 QThread和QtConcurrent都可以跨平台移植。