首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类中的Timer方法

类中的Timer方法
EN

Stack Overflow用户
提问于 2014-07-18 09:13:12
回答 2查看 616关注 0票数 2

首先介绍一下我的开发环境:

代码语言:javascript
运行
复制
OS: Windows.
SDK: Microsoft Visual Studio 2008.

今天早些时候,我面临着在类中定义计时器的问题。我的类正在接口一个Python模块和一个C++后端,我的问题是我需要在python模块上接收一些时间事件。另外,重要的是要注意,这个类只有一个实例。

主要问题是,当我使用以下方法定义计时器时:

代码语言:javascript
运行
复制
/* Null, 0, mseconds, CALLBACK_METHOD */
SetTimer(NULL, 0, 100, (TIMERPROC) OnTimer);

在timer事件(OnTimer)上激活的方法需要是我类上的静态方法(然后我不能访问该类中的任何非静态方法或变量)。

阅读我找到的代码项目代码:http://www.codeproject.com/Articles/4817/How-to-use-SetTimer-with-callback-to-a-non-static

我有一个类似的实现,但没有行:

代码语言:javascript
运行
复制
void * CSleeperThread::pObject;

代码语言:javascript
运行
复制
CSleeperThread *pSomeClass = (CSleeperThread*)pObject; // cast the void pointer
pSomeClass->TimerProc(hwnd, uMsg, idEvent, dwTime); // call non-static function

这是实现我正在寻找的功能的唯一方法吗?是否有更简单的方法可以跳过我的信息收集过程?

EN

Stack Overflow用户

回答已采纳

发布于 2014-07-18 09:54:32

创建类对象的静态映射:

代码语言:javascript
运行
复制
static std::map<UINT_PTR, CMyClass*> m_CMyClassMap; //declaration

在创建对象时,在此映射中插入对象:

代码语言:javascript
运行
复制
CMyClass myClassObj;
CMyClassMap.insert(std::pair<int, CMyClass*>(0, &myClassObj));

现在您可以在静态方法中使用它来访问它的非静态成员。

代码语言:javascript
运行
复制
int a = m_CMyClassMap[0]->m_someNonStaticMember;
票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24821340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档