4634|17

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

EVC下的定时函数问题 [复制链接]

我在网上看到有人说在EVC下定时函数timeSetEvent()可以用,
但我不知道该怎么用,望高手教教我。最好是有示例代码。
参与讨论着也有分(除专门接分者)。

最新回复

是的,我观察了一下,在wince的lib里面发现了这个链接库,加上编译就通过了。 多谢这么多位大哥的指导! 问题解决,散分。  详情 回复 发表于 2008-6-10 17:46
点赞 关注

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
MMRESULT timeSetEvent(
  UINT uDelay,
  UINT uResolution,
  LPTIMECALLBACK fptc,
  DWORD dwUser,
  UINT fuEvent
);

没用过。
看样子是需要一个回调函数。
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这个函数的使用,是比较麻烦。
需要调用:
timeGetDevCaps()
timeBeginPeriod()
然后调用 它
最后调用:timeKillEvent()

定义一个回调函数:
static VOID CALLBACK StopwatchTimer(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2)
{
}

 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
我在VC下调试都是通过的,没有问题,
但在EVC下我把回调函数加上它提示有联接错误,但是显然注释掉又肯定有问题。
那位高手能够详细讲解一下这个函数的用法,最好是有示例。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 
贴出你的代码
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

6
 
  1. #include
  2. #include
  3. # define ONE_MILLI_SECOND 100//定义1ms和2s时钟间隔,以ms为单位 ;
  4. # define TWO_SECOND 2000
  5. # define TIMER_ACCURACY 1 //定义时钟分辨率,以ms为单位
  6. UINT wTimerRes_1ms,wTimerRes_2s; //定义时间间隔
  7. UINT wAccuracy; //定义分辨率
  8. UINT TimerID_1ms,TimerID_2s; //定义定时器句柄
  9. void PASCAL OneMilliSecondProc(UINT wTimerID, UINT msg,DWORD dwUser,
  10. DWORD dwl,DWORD dw2)
  11. {
  12.         // 定义计数器
  13.         static int ms = 0;
  14.         CCCureView *myview = (CCCureView *)dwUser;
  15.         // 取得系统时间,以ms为单位
  16.         DWORD osBinaryTime = GetTickCount();
  17.         //输出计数器值和当前系统时间
  18.         myview->DrawLine();
  19. }

  20. CCCureView::CCCureView()
  21. {
  22.         // TODO: add construction code here
  23.         // 给时间间隔变量赋值
  24.         wTimerRes_1ms = ONE_MILLI_SECOND;
  25.         wTimerRes_2s = TWO_SECOND;
  26.         TIMECAPS tc;
  27.         //利用函数timeGetDevCaps取出系统分辨率的取值范围,如果无错则继续;
  28.         if(timeGetDevCaps(&tc,sizeof(TIMECAPS))==TIMERR_NOERROR)
  29.         {
  30.         wAccuracy=min(max(tc.wPeriodMin, //分辨率的值不能超出系统的取值范围
  31.         TIMER_ACCURACY),tc.wPeriodMax);
  32.         //调用timeBeginPeriod函数设置定时器的分辨率
  33.         timeBeginPeriod(wAccuracy);

  34.         }

  35. }

  36. CCCureView::~CCCureView()
  37. {
  38.         timeKillEvent(TimerID_1ms); // 删除两个定时器
  39.         timeKillEvent(TimerID_2s); // 删除设置的分辨率
  40.         timeEndPeriod(wAccuracy);

  41. }
  42. void CCCureView::InitializeTimer()
  43. {
  44.         StartOneMilliSecondTimer();
  45. //        StartTwoSecondTimer();
  46. }


  47. // 加装1ms定时器
  48. void CCCureView::StartOneMilliSecondTimer()
  49. {
  50.         if((TimerID_1ms = timeSetEvent(wTimerRes_1ms, wAccuracy,
  51.                 (LPTIMECALLBACK) OneMilliSecondProc, // 回调函数;
  52.                 (DWORD)this,// 用户传送到回调函数的数据;
  53.                 TIME_PERIODIC)==10))//周期调用定时处理函数;
  54.         {
  55.         AfxMessageBox("不能进行定时!", MB_OK | MB_ICONASTERISK);
  56.         }
  57.         else
  58.         {
  59.                
  60.         }  //不等于0表明加装成功,返回此定时器的句柄;
  61. }

  62. void CCCureView::OnTime()
  63. {
  64.         // TODO: Add your command handler code here
  65.         //设置定时器

  66.         InitializeTimer();
  67. }

  68. void CCCureView::DrawLine()
  69. {
  70. ……
  71. }
复制代码

下面是提示的错误:(当然去掉上面这些代码,程序是正确的。在VC下这段代码是正确的。
--------------------Configuration: DAQ - Win32 (WCE emulator) Debug--------------------
Linking...
DAQView.obj : error LNK2019: unresolved external symbol __imp__timeBeginPeriod referenced in function "protected: __thiscall CDAQView::CDAQView(void)" (??0CDAQView@@IAE@XZ)
DAQView.obj : error LNK2019: unresolved external symbol __imp__timeGetDevCaps referenced in function "protected: __thiscall CDAQView::CDAQView(void)" (??0CDAQView@@IAE@XZ)
DAQView.obj : error LNK2019: unresolved external symbol __imp__timeEndPeriod referenced in function "public: virtual __thiscall CDAQView::~CDAQView(void)" (??1CDAQView@@UAE@XZ)
DAQView.obj : error LNK2019: unresolved external symbol __imp__timeKillEvent referenced in function "public: virtual __thiscall CDAQView::~CDAQView(void)" (??1CDAQView@@UAE@XZ)
DAQView.obj : error LNK2019: unresolved external symbol __imp__timeSetEvent referenced in function "public: void __thiscall CDAQView::StartOneMilliSecondTimer(void)" (?StartOneMilliSecondTimer@CDAQView@@QAEXXZ)
emulatorDbg/DAQ.exe : fatal error LNK1120: 5 unresolved externals
Error executing link.exe.

DAQ.exe - 6 error(s), 0 warning(s)
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

7
 
哦,更正:下面的错误是EVC下编译的结果,上面的代码是我从VC中考过来的,所以函数名字不太一样。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

8
 
把EVC的代码贴出来吧,代码肯定不一样的。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

9
 
SETTIME吧
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

10
 
代码是我从VC中拷过去稍微改了下,是一样的。要说不同就是CCCCCCureView和CDAQView的区别
我现在用的就是setTime(),由于精度不够,所以想换一个
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

11
 
SetTimer的精度不够啊。

那你可以自己建个线程,然后用socket的select来等待需要的时间,然后再处理,就象一个定时器一样。
据说select的还是比较精度高的。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

12
 
关注,不知道采用监测GetTickCount之类的函数的返回值行不行?
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

13
 
谁能够示范一下呀,难道就没人会用吗?
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

14
 
是不是要加什么头文件或者联接库
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

15
 
  1. #include //已经包含了的头文件
  2. #include
  3. # define ONE_MILLI_SECOND 100//定义1ms和2s时钟间隔,以ms为单位 ;
  4. # define TWO_SECOND 2000
  5. # define TIMER_ACCURACY 1 //定义时钟分辨率,以ms为单位
  6. UINT wTimerRes_1ms,wTimerRes_2s; //定义时间间隔
  7. UINT wAccuracy; //定义分辨率
  8. UINT TimerID_1ms,TimerID_2s; //定义定时器句柄


  9. static VOID CALLBACK OneMilliSecondProc(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2)
  10. {
  11.         // 定义计数器
  12.         static int ms = 0;
  13.         CDAQView *app = (CDAQView *)dwUser;
  14.         // 取得系统时间,以ms为单位
  15.         DWORD osBinaryTime = GetTickCount();
  16.         //输出计数器值和当前系统时间

  17.         app->Timer();
  18. }
  19. CDAQView::CDAQView()
  20. {
  21.         // TODO: add construction code here

  22.         // 给时间间隔变量赋值
  23.         wTimerRes_1ms = ONE_MILLI_SECOND;
  24.         wTimerRes_2s = TWO_SECOND;
  25.         TIMECAPS tc;
  26.         //利用函数timeGetDevCaps取出系统分辨率的取值范围,如果无错则继续;
  27.         if(timeGetDevCaps(&tc,sizeof(TIMECAPS))==TIMERR_NOERROR)
  28.         {
  29.         wAccuracy=min(max(tc.wPeriodMin, //分辨率的值不能超出系统的取值范围
  30.         TIMER_ACCURACY),tc.wPeriodMax);
  31.         //调用timeBeginPeriod函数设置定时器的分辨率
  32.         timeBeginPeriod(wAccuracy);

  33. }

  34. CDAQView::~CDAQView()
  35. {
  36.         timeKillEvent(TimerID_1ms); // 删除两个定时器
  37. // 删除设置的分辨率
  38.         timeEndPeriod(wAccuracy);
  39. }


  40. void CDAQView::StartOneMilliSecondTimer()
  41. {       
  42.         if((TimerID_1ms = timeSetEvent(wTimerRes_1ms, wAccuracy,
  43.                 (LPTIMECALLBACK) OneMilliSecondProc, // 回调函数;
  44.                 (DWORD)this,// 用户传送到回调函数的数据;
  45.                 TIME_PERIODIC)==10))//周期调用定时处理函数;
  46.         {
  47.                         AfxMessageBox("不能进行定时!", MB_OK | MB_ICONASTERISK);
  48.         }
  49.         else
  50.         {
  51.                
  52.         }  //不等于0表明加装成功,返回此定时器的句柄;
  53. }

  54. void CDAQView::InitializeTimer()
  55. {
  56.         StartOneMilliSecondTimer();
  57. }
复制代码

/*****************出现的问题如下******************************/
Linking...
DAQView.obj : error LNK2019: unresolved external symbol __imp__timeBeginPeriod referenced in function "protected: __thiscall CDAQView::CDAQView(void)" (??0CDAQView@@IAE@XZ)
DAQView.obj : error LNK2019: unresolved external symbol __imp__timeGetDevCaps referenced in function "protected: __thiscall CDAQView::CDAQView(void)" (??0CDAQView@@IAE@XZ)
DAQView.obj : error LNK2019: unresolved external symbol __imp__timeEndPeriod referenced in function "public: virtual __thiscall CDAQView::~CDAQView(void)" (??1CDAQView@@UAE@XZ)
DAQView.obj : error LNK2019: unresolved external symbol __imp__timeKillEvent referenced in function "public: virtual __thiscall CDAQView::~CDAQView(void)" (??1CDAQView@@UAE@XZ)
DAQView.obj : error LNK2019: unresolved external symbol __imp__timeSetEvent referenced in function "public: void __thiscall CDAQView::StartOneMilliSecondTimer(void)" (?StartOneMilliSecondTimer@CDAQView@@QAEXXZ)
emulatorDbg/DAQ.exe : fatal error LNK1120: 5 unresolved externals
望91program能看一下问题出在哪里?
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

16
 
没有加入Mmtimer.lib
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

17
 
如LS所说
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

18
 
是的,我观察了一下,在wince的lib里面发现了这个链接库,加上编译就通过了。
多谢这么多位大哥的指导!
问题解决,散分。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表