Say, I need to run a bunch of code that is prone to crash so I need to run it on a different process. Typically I'd do it like this:
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);
Obviously I can just use fork in my Qt4 application but I'm wondering if can I archive same functionality with any anything that Qt4 provides or any portable manner without resorting to having bunch of architecture #ifdefs
?
In any case, I'm targeting this app to have only pthread
implementation but I'd still like to keep things as much close to "native" Qt API as possible.
I've tested QThread
, and segfaulting in thread crashes the whole application obviously and it seems that QProcess
is only targetted to be used when spawning completely different executables. Any other alternatives ?
Windows flat-out doesn't have fork() in any publicly consumable way, so there's no Qt call to emulate it; you'll need to do something like start yourself with special command-line params or something.
I think you should go with QtConcurrent as it's the most high-level API for multithreaded programming available in Qt. This way your code will be more simple and cleaner.
As this is a high-level API it's probably implemented on top of lower-level APIs you already tried so this probably may not solve your problem, however.
Have you tried try...catch statements & figuring out how to avoid crashing????
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With