按C++键时随时调用函数

Anytime function call when pressing a key C++

本文关键字:调用 函数 C++      更新时间:2023-10-16

有没有办法让我的程序在每次按下 h 时都显示一条消息(如快速指南,使用 cout<<"Instructions";),但保留序列?

例:

#include <everything>
using namespace std;
int main{
    {Event 1}
    {Event 2}
    {Event 3}
}

~Program running~
(Event 1) runs
*user presses h*
*shows help automatically*
(event 2) runs
(event 3) runs
exit

我已经搜索过,但找不到如何在 c++ 中做到这一点。

如果你在任何类似Linux/Unix的系统上运行,你可以在主程序中用信号中断处理程序处理"h"键,如下所示:

#include <csignal>
// ...
void signalHandler( int signum ) {
    cout << "Here your help...n";
}
int main() {
    // kick off your other thread to run select()...
    signal(USER1, signalHandler);
    // ...
}

然后在你启动的另一个线程中运行,运行在stdin上调用select()的代码,然后(当有输入时)read()获取已输入的字符,如果它是h则将USER1信号发送到您的主线程。

因为我最近加入了SO,没有足够的声誉来评论现有的答案,所以我必须开始一个新的答案。

我同意@paul-Evans的回答,如果你想学习操作系统进程管理和信号处理的基础知识,我想分享幻灯片:https://www.cs.drexel.edu/~wmm24/cs283/lectures/procmgt.ppt,它基于经典CSAPP(计算机系统程序员的Prespective)的第8章

下面是游戏内菜单的一些代码。用户按下 ESC 按钮调出菜单,按 F8 退出游戏

#include <iostream> 
#include <conio.h>
using namespace std;
#define KB_UP 72
#define KB_DOWN 80
#define KB_LEFT 75
#define KB_RIGHT 77
#define KB_ESCAPE 27
#define KB_F8 66
void gamemenu()
{
    cout<<"  n";
    cout<<"[1] Resume Game  n";
    cout<<"[2] Save Game  n";
    cout<<"[3] Exit Game  n";
}
int main()
{
   int KB_code=0;
   cout<<"Game menu 0.01 betann";
   cout<<"press F8 to Exitn";
   cout<<"press ESC for Game menu n";
   while(KB_code != KB_F8 )
   { 
     if (kbhit())
      {
            KB_code = getch();
            //cout<<"KB_code = "<<KB_code<<"n";
            switch (KB_code)
            {
                case KB_ESCAPE:
                    gamemenu();
                break;
                case KB_LEFT:
                           //Do something
                break;
                case KB_RIGHT:
                           //Do something                     
                break;
                case KB_UP:
                           //Do something                     
                break;
                case KB_DOWN:
                           //Do something                     
                break;
            }        
      }
  }
  return 0;
}

输出:

Game menu 0.01 beta
press F8 to Exit
press ESC for Game menu
[1] Resume Game
[2] Save Game
[3] Exit Game