在线程函数中的函数指针问题

cynew 2005-08-11 01:11:10
本来我是直接把一个函数名设给CreateThread函数的,代码如下:
hThread = CreateThread(
NULL, // default security attributes
0, // use default stack size
Hunter, // thread function
(LPVOID)pslfinx, // argument to thread function
CREATE_SUSPENDED, // use default creation flags
&dwThreadId);
Hunter为线程函数,声明为:DWORD WINAPI Hunter(LPVOID);
但是我想把CreateThread再往上包一层,所以想把一个函数指针传给CreateThread,于是我这样写:
typedef DWORD WINAPI DWWIN;
typedef DWWIN (*PFUNC)(LPVOID);


int StateMonitor::MonitorCreateThread(int Index,LPVOID p,PFUNC pfun)
{
......

DWORD dwThreadId;
HANDLE hThread;

hThread = CreateThread(
NULL, // default security attributes
0, // use default stack size
*pfun, // thread function
(LPVOID)pslfinx, // argument to thread function
CREATE_SUSPENDED, // use default creation flags
&dwThreadId);
............


但是编译的时候总是说CreateThread的第三个参数错误:
CreateThread' : cannot convert parameter 3 from 'unsigned long (__cdecl *)(void *)' to 'unsigned long (__stdcall *)(void *)'


这就奇怪了,我没有用函数指针,直接把函数传给她的时候就正确,用函数指针传就错误~~~郁闷了~
...全文
140 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
cynew 2005-08-11
  • 打赏
  • 举报
回复
居然有这么多星星,和这么多裤衩的人帮我答题,真是万分感谢~
dirdirdir3 2005-08-11
  • 打赏
  • 举报
回复
返回的类型不是DWORD WINAPI,而是DWORD啊,应该楼上的写法。
flyelf 2005-08-11
  • 打赏
  • 举报
回复
typedef DWORD( WINAPI *PFUNC)(LPVOID);

15,466

社区成员

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

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