【发布时间】:2011-09-20 18:51:23
【问题描述】:
我对我得到的奇怪异常感到非常惊讶。
class Threads {
public:
Threads() {}
~Threads() {}
void StartThread(int (*p)()); //pointer to a function
private:
HANDLE hThread;
DWORD dwThreadID;
};
方法 StartThread 应该接收指向我的函数的指针(它将在另一个线程中运行)。
这个功能很简单。 (如您所见,它位于类 Threads 之外):
int MyThread()
{
return 0;
}
这是创建线程的方法:
inline void Threads::StartThread(int (*p)())
{
hThread = CreateThread(NULL,
0,
(LPTHREAD_START_ROUTINE)(*p)(),
NULL,
0,
&dwThreadID);
if (hThread == NULL)
{
return;
}
}
此处编译器出错:无法将参数 3 从“int”转换为“LPTHREAD_START_ROUTINE”。这就是我进行选角的原因。
在主函数中,我创建了 Threads 类型的对象,并尝试调用 StartThread 方法。作为参数,我发送指向函数 MyThread 的指针。
Threads *thread1;
thread1 = new Threads();
thread1->StartThread(MyThread);
我认为 MyThread 必须从另一个线程开始。但是函数 MyTread 总是在主线程中运行!!!只有在 MyThread 结束后,另一个线程才会启动,然后我得到这个异常: ThreadClass.exe 中 0x00000000 处的未处理异常:0xC0000005:访问冲突。
我需要聪明的建议!
【问题讨论】:
标签: c++ multithreading winapi