我正在开发一个游戏,因此我不得不使用fork(),主线程运行opengl图形,子线程运行游戏逻辑。

现在我有一个问题。在某些时候,用户可以按下游戏内的“退出”按钮,该按钮由辅助线程处理。同样,在某些时候,用户可以单击X按钮退出由主(过剩)线程处理的游戏。所以这是我的问题:如何杀死另一个正在运行的线程并退出?

现在,如果我关闭窗口,第二个线程将继续运行,如果第二个线程完成,则第一个线程将继续运行。

可以使用atexit函数来处理'X'按钮,但是我还没有找到杀死glutMainLoop()的(安全)方法。

最佳答案

如果您实际上是在调用fork()(而不是启动新线程),则实际上是在创建另一个正在运行的进程。调用fork()时,它将进程ID返回到父进程。可以将其传递给kill()以终止该进程。在linux下,它看起来像:

#include <signal.h>

pid_t pid = fork();
if (pid == 0) {
   // you are in the child process
} else if (pid > 0) {
   // you are in the parent process
   ...
   // send a termination signal
   kill(pid, SIGTERM);
} else {
   // fork had an error which should be logged...
}


您需要选择发送信号的过程。例如,SIGKILL(9)很难杀死它。

关于c++ - 如何杀死C++中的 fork 进程?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9520460/

10-17 00:42