CreateThread第4个参数的迷茫
比如我要传一个 整数,必须得这么写
void CMultiThread2Dlg::OnStart()
{
UpdateData(TRUE);
int integer=m_nCount;
hThread=CreateThread(NULL,
0,
(LPTHREAD_START_ROUTINE)ThreadFunc,
(VOID*)integer, //这样才行
0,
&ThreadID);
GetDlgItem(IDC_START)-> EnableWindow(FALSE);
WaitForSingleObject(hThread,INFINITE);
GetDlgItem(IDC_START)-> EnableWindow(TRUE);
}
将其中的(VOID*)integer 换成 (VOID*)&integer就不行.
但是API的定义明明是LPVOID型的呀,难道 (VOID*)integer就能转成LPVOID?好奇怪!
[解决办法]
LPVOID MSDN上解释说是指向任何类型,所以写成(VOID *)integer,(VOID*)&integer这个传过去过的是integer的地址吧,有点像是指针的指针的味道。
[解决办法]
如果上面写(VOID*)&integer
那么下面应该写void ThreadFunc(int *integer)
[解决办法]
在你的threadfunc里也要 用指针吧?
void ThreadFunc(LPVOID lpInteger)
{
int integer=*(int*)lpInteger;
...
}
[解决办法]
这是一个传地址还是传值的问题
integer的地址在OnStart以外就无效了,所以(VOID*)&integer就不行
而(VOID*)integer实际上传的是integer的数值, 所以可以
如果你一定要用指针
int* pinteger = new int;
VOID*)pinteger传递就可以