Ydreamccc 2023-02-26 22:16 采纳率: 66.7%
浏览 16
已结题

获取鼠标信息速度过慢

请问一下为什么我输出的时候特别慢谢谢


void msg_()
{
    
    MOUSEMSG msg=GetMouseMsg();
while(MouseHit())
        {
            if (msg.uMsg == WM_LBUTTONDOWN && state == BEGIN)
            {
                begin.hang = msg.x / (imgsize + 10);
                begin.lie = msg.y / (imgsize + 10);
                printf("begiin %d %d\n", begin.hang, begin.lie);
                state = END;
            }
            else if (msg.uMsg == WM_LBUTTONDOWN && state == END)
            {
                end.hang = msg.x / (imgsize + 10);
                end.lie = msg.y / (imgsize + 10);
printf("%d %d\n", end.hang, end.lie);
                state = BEGIN;
            }
        
        }

    }

int main()
{
    

initgraph(h,n,SHOWCONSOLE);
    init_();
    while(1)
    {
        BeginBatchDraw();
        gamedraw();
        EndBatchDraw();
        
        msg_();
    
    }
    getchar();
    closegraph();



}
  • 写回答

1条回答 默认 最新

  • GISer Liu 2023-02-26 23:21
    关注

    以下答案引用自GPT-3大模型,请合理使用:

    示例:
    
    可能是代码中出现了卡顿,如while循环中可能存在大量的数据运算,导致执行缓慢。也可能是图片加载不当限制了CPU的速度,使得函数无法快速得到鼠标信息。要改善该问题,有以下几点可以做到:
    
    1、尝试采用缓存机制,提高图片加载速度,减少CPU训练成本。
    
    2、优化while循环, 尽量精简循环内部代码,减少数据运算量。
    
    3、可以通过增加线程数来提高程序效率,或者做预处理,将一段时间内的鼠标操作信息收集起来,避免大量的处理过程,提高处理速度。
    
    以下是一个示例,使用缓存机制提高图片加载速度:
    #include <graphics.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    
    #define imgsize 32 //定义图片大小
    
    typedef struct point {
        int hang;
        int lie;
    } Point;
    
    //声明图片对象
    MOUSEMSG msg;
    IMAGE map;
    int h = 640, n = 480;  //游戏画布大小
    
    //位置变量
    Point begin, end;
    int state = BEGIN;
    
    //函数声明
    void init_();//初始化
    void gamedraw();//绘制游戏画面
    void msg_();//获取鼠标信息
    
    //缓存机制函数
    void readMap()
    {
      //预先读取map文件,放入缓存中
        getimage(&map, "map.bmp");
    }
    
    //初始化函数
    void init_()
    {
        initgraph(h,n,SHOWCONSOLE);   //初始化画布
        BeginBatchDraw();             //开始批量绘制
        readMap();
    }
    
    //绘制游戏画面
    void gamedraw()
    {
        putimage(0, 0, &map);   //绘制地图
    }
    
    //获取鼠标信息
    void msg_()
    {
        MOUSEMSG msg=GetMouseMsg();
        while(MouseHit())
        {
            if (msg.uMsg == WM_LBUTTONDOWN && state == BEGIN)
            {
                begin.hang = msg.x / (imgsize + 10);
                begin.lie = msg.y / (imgsize + 10);
                printf("begiin %d %d
    

    如果我的回答解决了您的问题,请采纳我的回答

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月7日
  • 已采纳回答 2月27日
  • 创建了问题 2月26日

悬赏问题

  • ¥15 用twincat控制!
  • ¥15 请问一下这个运行结果是怎么来的
  • ¥15 单通道放大电路的工作原理
  • ¥30 YOLO检测微调结果p为1
  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决