线程创建出错

来源:百度知道 编辑:UC知道 时间:2024/05/26 04:48:53
大家帮忙看看创建下面创建的线程错在哪里?本人刚接触VC,望多多指教!
class CLoop
{
public:
CLoop();
~CLoop();
void *Loop(void* pUserData);
int Init();
void function();
};

//
int CLoop::Init()
{
DWORD ThreadId;
CreateThread (NULL,
0,
LPTHREAD_START_ROUTINE)(Loop),
NULL,
NULL,
&ThreadId
);
SetThreadPriority(&ThreadId, THREAD_PRIORITY_ABOVE_NORMAL);
return 0;
}
void CLoop::*Loop(void* pUserData)
{
function();
}
void CLoop::function()
{
}

错误:
error C2440: 'type cast' : cannot convert from '' to 'unsigned long (__stdcall *)(void *)'
error C2065: 'function()' : undeclared identifier
没有看懂,能否具体一些? CreateThread不是创建线程了吗?
我是在MFC的菜单消息响应函数里调用:
CLoop *m_Loop=new CLoop;
m_Loop->Init();
在用户选择菜单的时候创建一个线程。

线程函数必须是全局的,一定要放在类里面就 static
线程函数返回值要求使用 UINT
函数调用规则需要使用 __stdcall

static UINT __stdcall Loop(void *pUserData);

创建时
CreateThread(..., (LPTHREAD_START_ROUTINE)&CLoop::Loop, ...)

1.根本没看到创建线程的函数。
2.void× CLoop::Loop(void* pUserData);
3.该函数没有返回值。

把完整代码贴出来!