线程响应键盘按键的例子

例子1:键盘输入的字符会排队,一个一个被线程处理。

#include <iostream>
#include <stdio.h>
#include <pthread.h>
using namespace std;

char ch = 0;
pthread_t tid;

void *thread_func(void *arg)
{
        while(true)
        {
                ch=getchar();
                sleep(1);
        }
}

int main()
{
        //pthread_t tid;
        if (pthread_create(&tid, NULL, thread_func, NULL) != 0)
        {
                cout<<"Create thread error\n";
                return -1;
        }

        while(1)
        {
                if(ch==‘p‘ || ch==‘P‘)
                {
                        cout<<"Keboard: ‘"<<ch<<"‘: print"<<endl;
                        ch=0;
                        continue;
                }else if(ch==‘q‘ || ch==‘Q‘)
                {
                        cout<<"Keboard: ‘"<<ch<<"‘: exit"<<endl;
                        break;
                }

        }
        return 0;

}

输出结果:

[[email protected] thread]# ./a.out
p
Keboard: ‘p‘: print
p
p
op
Keboard: ‘p‘: print
Keboard: ‘p‘: print
Keboard: ‘p‘: print
pppppq
Keboard: ‘p‘: print
Keboard: ‘p‘: print
Keboard: ‘p‘: print
Keboard: ‘p‘: print
Keboard: ‘p‘: print
Keboard: ‘q‘: exit

[[email protected] thread]# ./a.out
p
Keboard: ‘p‘: print
^C

例子2:信号和线程一起的例子

#include <iostream>
#include <stdio.h>
#include <pthread.h>
#include <signal.h>
using namespace std;

char ch = 0;

//signal
void handle_sigint(int)
{
        printf("[singal]: catched ctrl+c\n");
        ch=‘q‘;
}

//pthread
pthread_t tid;
void *thread_func(void *arg)
{
        while(true)
        {
                ch=getchar();
                sleep(1);
        }
}

int main()
{
        //signal
        struct sigaction sig;
        sig.sa_handler = handle_sigint;
        sigemptyset(&sig.sa_mask);
        sig.sa_flags = 0;
        sigaction(SIGINT, &sig, NULL);

        //pthread_t
        if (pthread_create(&tid, NULL, thread_func, NULL) != 0)
        {
                cout<<"Create thread error\n";
                return -1;
        }

        while(1)
        {
                if(ch==‘p‘ || ch==‘P‘)
                {
                        cout<<"Keboard: ‘"<<ch<<"‘: print"<<endl;
                        ch=0;
                        continue;
                }else if(ch==‘q‘ || ch==‘Q‘)
                {
                        cout<<"Keboard: ‘"<<ch<<"‘: exit"<<endl;
                        break;
                }

        }

        return 0;

}

输出结果:

[[email protected] thread]# ./a.out
p
Keboard: ‘p‘: print
p
p
Keboard: ‘p‘: print
Keboard: ‘p‘: print
q
Keboard: ‘q‘: exit

时间: 2024-08-08 23:40:22

线程响应键盘按键的例子的相关文章

键盘按键操作例子

按回车后调用CommonEventfunction PressEnterEvent(eve) {    var currKey = 0, e = e || event;    currKey = e.keyCode || e.which || e.charCode;    if (currKey == 13) {        CommonEvent(eve);    }    if (currKey == 46) {        $(this).val("");        Co

Android官方开发文档Training系列课程中文版:键盘输入处理之处理键盘按键

原文地址:http://android.xsoftlab.net/training/keyboard-input/commands.html 当用户将焦点给到可编辑文本的View时,例如EditText这种,并且该设备还拥有实体键盘,那么所有的输入都会被系统处理.然而,如果你希望可以拦截或者直接处理键盘的输入事件的话,你可以通过实现回调方法KeyEvent.Callback接口来做到.比如onKeyDown()和onKeyMultiple(). Activity与View都实现了KeyEvent

关于js键盘事件的例子

JavaScript onkeydown 事件 用户按下一个键盘按键时会触发 onkeydown 事件.与 onkeypress事件不同的是,onkeydown 事件是响应任意键按下的处理(包括功能键),onkeypress 事件只响应字符键按下后的处理. 提示 Internet Explorer/Chrome 浏览器使用 event.keyCode 取回被按下的字符,而 Netscape/Firefox/Opera 等浏览器使用 event.which. onkeydown 获取用户按下的键

一个简单的截取键盘按键的驱动

近来在学驱动开发,自己写了一个简单地驱动程序,截取键盘按键,另外写的应用程序会显示按键.下面是驱动部分的关键代码,完整代码点击:猛戳这里 /**************************************************************/ #include "KeyFilter.h" /************************************************************************ * 函数名称:DriverE

检测键盘按键(三)——keypress和keydown、keyup

keypress:在IE和chrome中主要用来捕获数字(注意:包括Shift+数字的符号).字母(注意:包括大小写).小键盘等除了F1-12.SHIFT.Alt.Ctrl.Insert.Home.PgUp.Delete.End.PgDn.ScrollLock.Pause.NumLock.{菜单键}.{开始键}和方向键外的ANSI字符. 在IE中Esc有值,Chrome中不能触发. FF都可以触发keypress,除了Alt.Ctrl.Shift键. keypress可以捕获组合键,比如当用户按

onkeyup 事件会在键盘按键被松开时发生

定义和用法 onkeyup 事件会在键盘按键被松开时发生. 语法 onkeyup="SomeJavaScriptCode" 参数 描述 SomeJavaScriptCode 必需.规定该事件发生时执行的 JavaScript. 支持该事件的 HTML 标签: <a>, <acronym>, <address>, <area>, <b>, <bdo>, <big>, <blockquote>,

Ogre: 建立一个简单的框架——响应键盘事件

[转载请保证内容的完整性和正确性] 建立一个简单的框架——响应键盘事件 上一节我们在场景中添加了一个机器人,这一节我们将建立一个FrameListener类(顾名思义,这是一个侦听类),来控制模型进行移动. 创建FrameListener类 FrameListener类主要负责事件的侦听,如帧结束.键盘输入等事件.它继承自ExampleFrameListener类,如果需要的话还可以继承KeyListener(键盘事件).MouseListener(鼠标事件)和JoyStickListener(

13.Linux键盘按键驱动 (详解)

版权声明:本文为博主原创文章,未经博主允许不得转载. 在上一节分析输入子系统内的intput_handler软件处理部分后,接下来我们开始写input_dev驱动 本节目标: 实现键盘驱动,让开发板的4个按键代表键盘中的L.S.空格键.回车键 1.先来介绍以下几个结构体使用和函数,下面代码中会用到 1)input_dev驱动设备结构体中常用成员如下: struct input_dev { void *private; const char *name; //设备名字 const char *ph

C语言获取键盘按键

在写控制台游戏的时候,发现不管用cin,scanf还是getchar,都不能实时的输入按键,必须要按回车才能读进去,而按回车的话会导致输入异常,所以要使用获取键盘按键的函数. 加入头文件#include<conio.h>,函数为getch(),返回的是int类型,可以把键盘上的键都按一遍,来尝试每个键对应的值是什么. 其中关键的键位如下: w:119 a:97 s:115 d:100 ↑:72 ↓:80 ←:75 →:77