c/c++非阻塞键盘输入事件 Windows/Linux

windows非阻塞编程

#include <conio.h>
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
	while (!_kbhit()) //在没有接收到键盘事件的时候这个循环会一直存在
	{ 
		cout << "等待键盘点击!!" << endl;
		Sleep(50);
	}
	char ch =  _getch();
	printf("\nKey struck was '%c'\n",ch);
	system("pause");
}

linux非阻塞编程

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define TTY_PATH            "/dev/tty"
#define STTY_US             "stty raw -echo -F "
#define STTY_DEF            "stty -raw echo -F "

int get_char()
{
    fd_set rfds;
    struct timeval tv;
    int ch = 0;
    FD_ZERO(&rfds);
    FD_SET(0, &rfds);
    tv.tv_sec = 0;
    tv.tv_usec = 10; //设置等待超时时间
    if (select(1, &rfds, NULL, NULL, &tv) > 0) //检测键盘是否有输入
    {
        ch = getchar(); 
    }
    return ch;
}
 
int main()
{
    int ch = 0;
    system(STTY_US TTY_PATH);
    
    while(1){
        ch = get_char();
        if(ch != 0)
        {
            printf("%d\n\r",ch);
            unsleep(1000);//进行休眠
        }
        if(ch == 3){
            system(STTY_DEF TTY_PATH);
            return 0;
        }         
    }
}
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值