쓰레드 안에서 fork 사용 관련해서 질문드립니다...
글쓴이: bao / 작성시간: 수, 2016/10/12 - 5:32오후
qt 로 프로그래밍을 하다가 질문드립니다.
다이얼로그 기반에서 버튼 하나를 만들고 버튼을 누를경우
쓰레드를 하나 만들고 그 쓰레드 안에서
fork를 프로세스를 만든 다음에
pid = fork(); if (pid > 0) { execv("프로그램 경로", argv); }
이런식으로 다른 프로그램을 실행 시켰더니
QObject::killTimers: timers cannot be stopped from another thread
위의 내용과 함께 fork시킨 프로세스에서 실행한 프로그램만 실행이 되고
다이얼로그는 종료가 되어버립니다.
다이얼로그를 종료 시키면 안되는데 어떤식으로 프로그램을 만들어야 하는건가요??
void Dialog::on_pushButton_clicked() { pthread_t pThread; int thrId; thrId = pthread_create(&pThread, NULL, threadStrat, NULL); pthread_join(pThread, NULL); //pthread_detach(pThread); } void* threadStrat(void* param) { int pid; char *argv[20] = {0}; argv[0] = "파라미터"; pid = fork(); if (pid > 0) { execv("프로그램경로", argv); } }
Forums:
잘 모르겠지만 쓰레드 안에서 fork()를 할 필요가
잘 모르겠지만 쓰레드 안에서 fork()를 할 필요가 있나요?
쓰레드를 만들지 말고 그냥 fork()를 하면 안되나요?
이걸 가져다 쓰려는 곳이 쓰레드 기반으로 되어있어서...
이걸 가져다 쓰려는 곳이 쓰레드 기반으로 되어있어서...
쓰레드 안에서 꼭 사용을 해야 합니다..
잘 이해가 되지는 않네요. fork()라는 것은
잘 이해가 되지는 않네요. fork()라는 것은 새로운 프로세스를 만드는 것이잖아요?
만약 쓰레드를 따로 만들어서 fork()를 하지 않으면 어떤 현상이 발생하나요? 프로그램이 죽나요?
그리고 fork()를 하면 자기 자신이 그대로 복제되는 것이기 때문에 타이머 등이 enable 되어 있으면 이중으로 잡혀서 에러가 발생할 수 있을 것 같습니다. 처음 구동시에는 타이머를 enable 하고 있지 않다가 (또는 동적으로 잡아서) fork()를 하고 난 후 enable 하는 식으로 해야 할 것 같습니다.
QTimer *m_timer;
m_timer = new QTimer; 등등
프로그램 실행이 목적이라면, QProcess 를
프로그램 실행이 목적이라면, QProcess 를 사용하세요
음 ..
fork() 를 한 이후에 pid > 0 이라면, 이는 parent process 입니다.
여기에서 exec() 을 하면, parent process 가 새 프로그램으로 대체되겠죠.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
댓글 달기