Скажем, мне нужно запустить кучу кода, склонного к сбою, поэтому мне нужно запустить его в другом процессе. Обычно я делаю это так:
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);
Очевидно, что я могу просто использовать fork в своем приложении Qt4, но мне интересно, могу ли я заархивировать те же функции с помощью чего-либо, что предоставляет Qt4, или любым переносимым способом, не прибегая к связке архитектуры #ifdefs
?
В любом случае, я нацеливаю это приложение на реализацию только pthread
, но я все же хотел бы, чтобы все было как можно ближе к "нативному" Qt API.
Я протестировал QThread
, и segfaulting в потоке, очевидно, приводит к аварийному завершению всего приложения, и кажется, что QProcess
предназначен только для использования при создании совершенно разных исполняемых файлов. Любые другие альтернативы?