zoukankan      html  css  js  c++  java
  • 线程响应键盘按键的例子

    例子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
    ";
                    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;
    
    }

    输出结果:

    [root@localhost 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

    [root@localhost 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
    ");
            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
    ";
                    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;
    
    }

    输出结果:

    [root@localhost thread]# ./a.out
    p
    Keboard: 'p': print
    p
    p
    Keboard: 'p': print
    Keboard: 'p': print
    q
    Keboard: 'q': exit

  • 相关阅读:
    文献收录船舶建造的现代工程分解结构
    FLEX MDI窗口开发实例(2)
    收录国外造船信息Pursuit of a product work breakdown structure (PWBS)
    FLEX MDI窗口开发实例
    买了本<<flash actionscript 3.0殿堂之路>>
    今天我捐款了
    记Lambda的一个使用方法
    JXMS 低代码开发平台
    我的博客也Sliverlight
    代码编辑插件使用
  • 原文地址:https://www.cnblogs.com/jacklikedogs/p/3957828.html
Copyright © 2011-2022 走看看