易码技术论坛

 找回密码
 加入易码
搜索
查看: 162306|回复: 1

这段代码错在哪儿?很短的。

[复制链接]
发表于 2007-5-9 11:47:01 | 显示全部楼层
问题在于最后的
ReleaseKey(k);
在延时循环的时候Inkey()后没有ReleaseKey()以至于按键无效,
把ReleaseKey()放到InKey()后面就行了,
或者把Inkey()换成CheckKey(128);然后去掉ReleaseKey(k);
 楼主| 发表于 2007-5-5 10:56:37 | 显示全部楼层 |阅读模式
  以下这段代码的作用是模拟长按响应,类似于VB的KeyPress事件,即在第一次响应和第二次响应间有较长的停顿,不知错在哪儿。
  1. char LP;//即LongPress
  2. char f()
  3. {
  4.   char k;
  5.   int test;  //已接受考验的时间
  6.   test=0;
  7.   for(;;)
  8.   {
  9.     k=Inkey();
  10.     if(k)
  11.     {
  12.       if(!LP){LP=1;goto END;}  //LP=0说明这是第一次按键,立即响应
  13.       if(LP==1)   //LP=1说明用户正申请长按
  14.       {
  15.         test++;
  16.         if(test>2222){LP=2;goto END;}     //不能立即响应,而需要考验一段时间
  17.         ReleaseKey(k);
  18.       }
  19.       else goto END;  //LP=2说明已通过考验,能够享受长按响应
  20.     }
  21.     else LP=0;    //不论何时一旦检测到键盘空闲,就将LP置零
  22.   }
  23. END:
  24.   printf("%d",LP);  //这是调试用的,看看每次退出时LP的值
  25.   return k;
  26. }
  27. void main()
  28. {
  29. char k;
  30. for(;;)
  31. {
  32. k=f();
  33. if(k==27)exit(1);
  34. Beep();ReleaseKey(k);
  35. }
  36. }
复制代码
运行后发现Beep()的被执行的时间间隔是均匀的,而没有达到原想要的效果,即在第一次响应和第二次响应间有较长的停顿,还发现屏幕上显示的全是1,可是按照程序,LP=1时是不可能退出函数的,因为只有goto END语句才可能跳出for循环.
我整整一天都没检查出哪儿错了,十分希望得到帮助,谢谢!
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-3-29 07:12 , Processed in 0.008425 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表