首先介绍一下我的开发环境:
OS: Windows.
SDK: Microsoft Visual Studio 2008.今天早些时候,我面临着在类中定义计时器的问题。我的类正在接口一个Python模块和一个C++后端,我的问题是我需要在python模块上接收一些时间事件。另外,重要的是要注意,这个类只有一个实例。
主要问题是,当我使用以下方法定义计时器时:
/* 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
我有一个类似的实现,但没有行:
void * CSleeperThread::pObject;和
CSleeperThread *pSomeClass = (CSleeperThread*)pObject; // cast the void pointer
pSomeClass->TimerProc(hwnd, uMsg, idEvent, dwTime); // call non-static function这是实现我正在寻找的功能的唯一方法吗?是否有更简单的方法可以跳过我的信息收集过程?
发布于 2014-07-18 09:54:32
创建类对象的静态映射:
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;https://stackoverflow.com/questions/24821340
复制相似问题