给线程传递一个整数。

yeman039 2009-07-21 11:22:00
我的一个按钮代码如下
void CThread2Dlg::OnBtnStart()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
int integer=m_count;
m_hThread=CreateThread(NULL,0,ThreadProc,(LPVOID)integer,0,&m_ThreadID);
GetDlgItem(IDC_BTN_START)->EnableWindow(FALSE);
WaitForSingleObject(m_hThread,INFINITE);
GetDlgItem(IDC_BTN_START)->EnableWindow(TRUE);
}
错误如下:
G:\VCproject\Thread2\Thread2Dlg.cpp(179) : error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (int)' to 'unsigned long (__stdcall *)(void *)'
我的理解是一个整形和一个指针应该是可以相互转换的,所以(LPVOID)integer是可以的啊
...全文
99 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
elpase 2009-07-21
  • 打赏
  • 举报
回复
DWORD WINAPI ThreadProc(LPVOID ptr)
参数是一个可以指向任意值的指针。故不能直接传递参数,应该传递参数的地址。
[C/C++ code]
void CThread2Dlg::OnBtnStart()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
int integer=m_count;
m_hThread=CreateThread(NULL,0,ThreadProc,(LPVOID)&integer,0,&m_ThreadID);
GetDlgItem(IDC_BTN_START)->EnableWindow(FALSE);
WaitForSingleObject(m_hThread,INFINITE);
GetDlgItem(IDC_BTN_START)->EnableWindow(TRUE);
}
[/code]
yeman039 2009-07-21
  • 打赏
  • 举报
回复
恩,是这样的。
killbug2004 2009-07-21
  • 打赏
  • 举报
回复
是第3个参数
你的线程函数原形应该是下面这种形式
DWORD WINAPI ThreadProc(LPVOID ptr)

15,471

社区成员

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

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