C:按p而不是Ctrl + Z暂停进程

时间:2017-10-31 04:45:46

标签: c signals

是否可以通过按键盘上的按钮暂停线程/进程,例如" P",然后按" R"恢复进程。而不是Ctrl + Z?

我的尝试如下:

int sig_pause = 0; // define global variable 
....


void* thread_function (void *ptr)
{
    ....
    while(sig_flag) usleep(100); // wait if sig_flag is 1
}



/* pause function */
void pause_handler(int sig)
{
    if(sig==SIGTSTP)  sig_pause=1-sig_pause;
}



int main(void){
....
signal(SIGTSTP, pause_handler);
}

上面的方法可以通过按ctrl + z工作正常,但我不知道如何自定义它到我的按键。

1 个答案:

答案 0 :(得分:3)

这是因为信号只捕获非常特定的信号,通常是通过操作系统或其他进程发送到程序线程。对于任何键盘输入,标准C都没有办法做到这一点。你需要的是一个键盘监听器,它需要绑定到运行该进程的窗口。通常不包括控制台,当我环顾四周时,我找不到任何东西。如果你有某种GUI,你可能会使用一个线程或至少一些GUI库的事件函数。

您可以使用线程让另一个线程在重复时调用某个已修改的函数,该函数具有对可用于暂停程序的标志的共享内存访问权限。该线程可以处理可能阻塞的标准输入调用,如果您可以找到适用于您的操作系统的代码并进行编译,以确保调用不会阻塞,并且不需要输入&#39 ;按下那可能有效。您不应该或者不能同时尝试从标准输入读取多个内容。

关于我能想到的所有事情。

http://www.geeksforgeeks.org/multithreading-c-2/

您可以创建一个具有无限循环功能的线程,该循环执行等待并捕获您的输入。只是不要打电话加入它。 (你想让它运行。)然后你需要的只是一个基于输入和静态变量或标记的状态机。'