为什么我不能在类中定义线程函数?

songfen8432 2003-08-19 05:32:14
小弟想在类中定义线程函数(已定义为static),可是编译老是出现错误,各位大虾帮忙看看怎么回事:
在View类的h文件中定义:
public:
static DWORD WINAPI FireBurnThread(LPVOID param);

在View类的cpp文件中定义:
DWORD WINAPI CLearnOpenGL2View::FireBurnThread(LPVOID param)
{
return 0;
}

在View类的某个函数中启动线程:
HWND hWnd = GetSafeHwnd();
AfxBeginThread(FireBurnThread, hWnd);

结果编译提示错误:error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned long (void *)'

到底怎么回事啊?
...全文
289 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
songfen8432 2003-08-21
  • 打赏
  • 举报
回复
多谢各位!
问题已经解决了:
h文件中定义:
static UINT FireBurnThread(LPVOID param);
cpp文件中定义:
UINT CLearnOpenGL2View::FireBurnThread(LPVOID param)
{
........
}
启动线程:
AfxBeginThread(FireBurnThread, this);
编译运行良好!
结帖
akun 2003-08-20
  • 打赏
  • 举报
回复
AfxBeginThread 函数:
refer to MSDN:
CWinThread* AfxBeginThread(
AFX_THREADPROC pfnThreadProc,
LPVOID pParam,
int nPriority = THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
);
CWinThread* AfxBeginThread(
CRuntimeClass* pThreadClass,
int nPriority = THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
);

你是想用第一个函数~~~~
但是你第2个参数是hWnd, 可转变为是int型(不是LPVOID),所以引用第2个函数定义...
vcforever 2003-08-20
  • 打赏
  • 举报
回复
AfxBeginThread的第二个参数应该是个指针,不应该是个句柄
孤必有邻 2003-08-19
  • 打赏
  • 举报
回复
同时,线程函数也不是标准调用函数,WINAPI(即__stdcall)显然通不过
孤必有邻 2003-08-19
  • 打赏
  • 举报
回复
问题出在:
AfxBeginThread()要求线程函数的返回值类型为UINT(即unsigned int)
DWORD(是unsigned long)显然不同于UINT,所以提示参数1不能从unsigned long(即DWORD)转换
DDHuang 2003-08-19
  • 打赏
  • 举报
回复
我就搞不懂了,上面说can convert parameter 1 from type 'unsigned long (void *)
改parameter 2 有什么用?
我觉得该改成afxbeginthread(( AFX_THREADPROC)FireBurnThread,hWnd)
FAICHEN 2003-08-19
  • 打赏
  • 举报
回复
AfxBeginThread(FireBurnThread, (void*)&hWnd);
无类型
mountlin 2003-08-19
  • 打赏
  • 举报
回复
改成如下形式:
声明:static UINT FireBurnThread(LPVOID param);
定义:UINT CLearnOpenGL2View::FireBurnThread(LPVOID param)
akun 2003-08-19
  • 打赏
  • 举报
回复
AfxBeginThread(FireBurnThread, hWnd);

改:

AfxBeginThread(FireBurnThread, (void*)&hWnd);

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧