【发布时间】:2012-10-13 22:09:19
【问题描述】:
我不知道这是否可能,但我有一个想法,即创建一个抽象类来使用 WinAPI 创建线程。该类将被定义在线程中执行的函数的类继承。
我有两个班级:
class XYZ{
//...
class ABC: public XYZ{
//...
我有一个构造
ABC::ABC()
{
addThread(this,1);
}
addThread 在 XYZ 类中定义:
void addThread(void* self, int a)
{
DWORD ThreadID;
THREAD_DATA *threadData;
threadData->self = self;
threadData->thread_id = a;
CreateThread(NULL, 0, createThread, threadData, 0, &ThreadID);
}
如您所见,我正在创建一个包含两个字段的结构:超类的对象和线程数(因此该方法可以知道使用哪些数据)。
结构如下:
typedef struct _THREAD_DATA {
void* self;
int thread_id;
} THREAD_DATA;
XYZ类的静态方法中的createThread:
static DWORD WINAPI createThread(void* _threadData)
{
THREAD_DATA* threadData = (THREAD_DATA*) _threadData;
return threadData->self->execute(threadData->thread_id);
}
这里是一切都出错的地方。 我的 VSC++ 2010 在静态方法主体的第二行中强调了第一个单词“threadDataself”。 编译后出现错误:
'->execute' 的左边必须指向类/结构/联合/泛型类型
我不知道如何解决它。我使用这些链接编写了这段代码: http://goo.gl/7VYC3 & http://goo.gl/ETfe7
execute 方法在 XYZ 类中声明为:
virtual DWORD execute(int i);
然后在ABC类中定义为
DWORD ABC::execute(int i){
//...
谁能帮帮我?我将不胜感激任何提示如何使它工作。
【问题讨论】:
-
你在哪里定义threadDataself?你的意思是threadData->self->execute?
-
是的,这是一个错误。我编辑了这个问题。对不起这个问题。 PS:这是有错误的那一行。
标签: c++ multithreading winapi object inheritance