C++_linux下_非阻塞键盘控制_程序暂停和继续

1. 功能

在程序执行过程中,点击键盘p按键(pause), 程序暂停, 点击键盘上的n按键(next),程序继续执行

2. 代码

cpp 复制代码
#include <iostream>
#include <stdio.h>
#include <unistd.h>  
#include <stdlib.h>  
#include <sys/ioctl.h> 

char get_keyboard()
{
    //fd_set 为long型数组
    //其每个元素都能和打开的文件句柄建立联系
    fd_set rfds;
    struct timeval tv;
    char c = '\0';
 
    //将 rfds数组清零
    FD_ZERO(&rfds);
    //将rfds的第0位置为1,这样fd=1的文件描述符就添加到了rfds中
    //最初 rfds为00000000,添加后变为10000000
    FD_SET(0, &rfds);
    tv.tv_sec = 0;
    tv.tv_usec = 10; //设置等待超时时间
 
    //检测键盘是否有输入
    //由内核根据io状态修改rfds的内容,来判断执行了select的进程哪个句柄可读
    if (select(1, &rfds, NULL, NULL, &tv) > 0)
    {
        c = getchar();
    }
 
    //没有数据返回'\0'
    return c;
}

int main(int argc, char **argv)
{
    int tmp = system("stty -icanon");

    for (int i = 0; i < 10000; i++)
    {

        char control_char = get_keyboard();
        std::cout << "control_char: " << control_char << std::endl;
        if (control_char == 'p') // pause
        {
            sleep(1);
            do
            {
                control_char = get_keyboard();
            } while (!(control_char == 'n')); // next
        }

        // do-something
        std::cout << "count: i = " << i << std::endl;
    }
    return 0;
}

可以使用opencv中相关函数简单实现: 空格键暂停, 其它任意键继续:

cpp 复制代码
// ...
int key = cv::waitKey(100) & 0xff;
if (key == 32) //bland
{
   cv::waitKey(0);
}
// ...

参考: linux下实现键盘的无阻塞输入_fd_zero(&rfds);-CSDN博客

相关推荐
饭碗的彼岸one6 分钟前
C++ 并发编程:异步任务
c语言·开发语言·c++·后端·c·异步
QT 小鲜肉11 分钟前
【QT随笔】结合应用案例一文完美概括QT中的队列(Queue)
c++·笔记·qt·学习方法·ai编程
黑菜钟19 分钟前
代码随想录第七天|● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 18.四数之和
c++·算法·leetcode
TNTLWT1 小时前
单例模式(C++)
javascript·c++·单例模式
水饺编程1 小时前
Windows 命令行:cd 命令3,当前目录,父目录,根目录
c语言·c++·windows·visual studio
kyle~1 小时前
C/C++---动态内存管理(new delete)
c语言·开发语言·c++
m0_552200821 小时前
《UE5_C++多人TPS完整教程》学习笔记49 ——《P50 应用瞄准偏移(Applying Aim Offset)》
c++·游戏·ue5
m0_552200821 小时前
《UE5_C++多人TPS完整教程》学习笔记50 ——《P51 多人游戏中的俯仰角(Pitch in Multiplayer)》
c++·游戏·ue5
The Chosen One9853 小时前
C++ : AVL树-详解
开发语言·c++
zzyzxb3 小时前
std::enable_shared_from_this
c++