类中的计时器方法
Timer method inside a class
首先介绍一下我的开发环境:
OS: Windows.
SDK: Microsoft Visual Studio 2008.
今天早些时候,我正面临着试图在类中定义计时器的问题。我的类是接口Python嵌入式模块和c++后端,我的问题是,我需要在Python模块上接收一些时间事件。同样重要的是要注意,该类只有一个实例。
主要问题是,当我使用
定义定时器时:/* Null, 0, mseconds, CALLBACK_METHOD */
SetTimer(NULL, 0, 100, (TIMERPROC) OnTimer);
在定时器事件(OnTimer)上激活的方法需要是我的类上的静态方法(然后我不能访问该类中的任何非静态方法或变量)。
阅读codeproject上的一些代码,我发现:http://www.codeproject.com/Articles/4817/How-to-use-SetTimer-with-callback-to-a-non-static
我有一个类似的实现,但没有以下行:
void * CSleeperThread::pObject;
和
CSleeperThread *pSomeClass = (CSleeperThread*)pObject; // cast the void pointer
pSomeClass->TimerProc(hwnd, uMsg, idEvent, dwTime); // call non-static function
这是实现我正在寻找的功能的唯一方法吗?有没有一种更简单的方法可以让我跳过收集信息的过程?
创建class对象的静态映射:
static std::map<UINT_PTR, CMyClass*> m_CMyClassMap; //declaration
创建对象时,在映射中插入对象:
CMyClass myClassObj;
CMyClassMap.insert(std::pair<int, CMyClass*>(0, &myClassObj));
现在可以在静态方法中使用它来访问其非静态成员。
int a = m_CMyClassMap[0]->m_someNonStaticMember;
只要这个类只有一个实例,就有一个简单(虽然有点难看)的解决方案:声明您的类对象,然后在全局对象中存储指向它的指针。例如,
MyClass myObject;
MyClass* self = &myObject;
然后在静态成员内部,你可以使用self->myMethod()或self->myData来引用非静态项
相关文章:
- Linux的Cpp上的计时器
- 提升 ASIO 无法识别计时器对象
- 提升 asio 并发计时器取消问题与链
- 使用单体计时器的pthread_cond_timedwait有时会比预期晚超时
- 窗口中的微秒计时器
- 计时器是否从另一个线程启动?
- 如何在 c++ 中创建计时器
- C++回调计时器实现
- 在计时器或主线程外部的命令上销毁/替换线程
- 如何制作每秒从 30 乘 1 倒计时的计时器?
- 保留计时器集合(对象与指针)的最佳方法
- 在网络套接字计时器滴答后增加asio短读错误
- 在C++线程内实现多个计时器的最安全方法
- 实现高分辨率计时器的最佳方法
- 有什么方法可以用本机C 代码替换Windows API计时器(settimer)
- 如何将计时器添加到每种类方法中
- 拥有以下计时器的最简单方法
- 类中的计时器方法
- 最有效的获取计时器的方法
- 使用Boost基本截止时间计时器来调用类方法