定时器回调函数传递参数的难题

alexander_david 2012-02-21 08:42:54
现在在一个控制台程序中使用定时器,这个在网上也有实例,但是问题是,我希望在自定义的定时器回调函数中访问一个对象,但是如何将这个对象指针传递给定时器回调函数?


...全文
552 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hotpos 2012-02-21
  • 打赏
  • 举报
回复
使用定时器可以考虑不再用多线程,因为用单线程的方式模拟了多线程的操作(进退栈)。而且不用考虑线程同步。
hotpos 2012-02-21
  • 打赏
  • 举报
回复
自己阻塞就是写死循环,不到时间不退出。

DWORD dw1 = GetTickCount();
while(GetTickCount()-dw1 < 100);
//100ms后
alexander_david 2012-02-21
  • 打赏
  • 举报
回复
谢谢各位。
5楼的方法我的确不知道,多谢。

还有请问六楼,自己阻塞是什么意思?
是自己单独开一个线程,执行定时器的功能?那么如何做到定时检测?
多谢。
许文君 2012-02-21
  • 打赏
  • 举报
回复
既然是多个线程,为什么要在定时器里处理,的确,我一般遇到的代码都是如LS所述,ID传指针,但是我个人认为还不如自己阻塞来得好。
hotpos 2012-02-21
  • 打赏
  • 举报
回复

UINT_PTR SetTimer(
HWND hWnd,
UINT_PTR nIDEvent,
UINT uElapse,
TIMERPROC lpTimerFunc
);
lpTimerFunc的原型为
VOID CALLBACK TimerProc(
HWND hwnd,
UINT uMsg,
UINT_PTR idEvent,
DWORD dwTime
);


你可以把一个对象的指针当 nIDEvent 塞给他,他会在回调里面再塞给你。
hwnd可以传NULL,如果你不想创建窗口
longluo59 2012-02-21
  • 打赏
  • 举报
回复
你在该类内定义一个定时器
alexander_david 2012-02-21
  • 打赏
  • 举报
回复
全局或静态是绝对不行的。
因为我要使用多个线程,多个实例的。
alexander_david 2012-02-21
  • 打赏
  • 举报
回复
http://baike.baidu.com/view/5913942.htm
--------------------------------
靠!万能的杜娘,在这个网页找到了:
dwUser: DWORD; //可为任意变量或者结构地址,他会在定时器触发的时候回传给回调函数
试试这个再说。
许文君 2012-02-21
  • 打赏
  • 举报
回复
本身WM_TIMER的wparam与lparam都是有用的,你没必要传递,使用全局的变量、类、结构体即可。

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧