Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Portable way to "fork()" in Qt4 application?

Tags:

c++

fork

qt

qt4

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 ?

like image 966
rasjani Avatar asked Jun 08 '09 21:06

rasjani


3 Answers

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.

like image 126
Ana Betts Avatar answered Oct 28 '22 17:10

Ana Betts


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.

like image 3
Piotr Dobrogost Avatar answered Oct 28 '22 17:10

Piotr Dobrogost


Have you tried try...catch statements & figuring out how to avoid crashing????

like image 1
ryansstack Avatar answered Oct 28 '22 16:10

ryansstack