c++ - 类中的计时器方法

标签 c++ visual-studio-2008

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

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;

关于c++ - 类中的计时器方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24821340/

相关文章:

c++ - 按行反转 ostringstream

c++ - 快速生成随机困惑

时间:2019-03-08 标签:c++fgetsformatchar*

c++ - 无法识别 C++ 中的字符串数据类型

visual-studio - Visual Studio 2008是否支持Windows 98?

c++ - 当我安装了多个 Visual Studio 版本时,如何使用 Visual Studio 2008 构建 boost?

visual-studio-2008 - MSBuild,使用不同的配置构建依赖项目

java - 使用 Qt 在 Android 上实现 NFC

c++ - 如何在 C++ 中模拟按键

visual-studio - 我想删除所有 bin 和 obj 文件夹以强制所有项目重建所有内容