| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2277 人关注过本帖
标题:C语言多线程按键监听问题
取消只看楼主 加入收藏
cuihe500
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2019-4-25
结帖率:0
收藏
已结贴  问题点数:10 回复次数:3 
C语言多线程按键监听问题
小弟想写一个贪吃蛇小游戏 需要用到按键监听 所以小弟想用多线程实现绘图和按键监听同时进行
但是按键监听占用CPU很高(35-45左右) 请各位大佬给小弟看一下怎么优化这个代码!万分感谢!

首先是函数代码:
程序代码:
void GetKB(void)
{
    char c;
    extern int Move;
    while (1)
    {
        if (_kbhit())
        {
            switch (_getch())
            {
            case up:
                Move = up;
                puts("up");
                break;
            case left:
                Move = left;
                puts("left");
                break;
            case right:
                Move = right;
                puts("right");
                break;
            case down:
                Move = down;
                puts("down");
                break;
            }
        }

    }
}

这里是主函数调用代码:
程序代码:
int main ()
{
    printf("贪吃蛇V0.1\n");
    DrawWall();
    NewGame();
    _beginthreadex(NULL, 0, (void*)GetKB, NULL, 0, NULL);
    Sleep(10000);
}
搜索更多相关主题的帖子: 按键 监听 Move case puts 
2019-06-18 21:16
cuihe500
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2019-4-25
收藏
得分:0 
回复 2楼 rjsp
首先感谢大佬的回答 我自己又改了一下 把if(_kbhit())删去 直接用_getch()进行阻断式按键监测 把问题解决了
其次是线程我刚学习 感谢大佬提醒
新代码:
程序代码:
void func (void*a)
{
    char b;
    while(1)
    {

        puts("进程1开始运行");
        if(b=getch())
        {
            switch (b)
            {
                case up:
                    puts("up");
                    break;
                case down:
                    puts("down");
                    break;
                case left:
                    puts("left");
                    break;
                case right:
                    puts("right");
                    break;        
             }
        }
}

 } 
2019-06-19 10:06
cuihe500
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2019-4-25
收藏
得分:0 
回复 4楼 rjsp
我不需要检测他的返回值 如果getch()接受到的不是wasd 那么就直接舍弃等待下一个值 或者加一个default:break; b=getch()是为了确定b获取了一个值 无论getch()获取得是什么都进行判断b 如果不正确直接舍去
2019-06-19 10:33
cuihe500
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2019-4-25
收藏
得分:0 
回复 6楼 rjsp
对哦 也应该是一样的
2019-06-19 10:54
快速回复:C语言多线程按键监听问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012792 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved