大體是這樣的:在頭文件的類外添加線程函數聲明void ThreadFunc();在類內部添加protected型變量: HANDLE hThread;DWORD ThreadID;編寫線程函數在主函數中創建該線程hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunction,NULL,0,&ThreadID);問題就是創建線程時出錯,cannot convert parameter 3 from 'void (void)' to 'unsigned long (__stdcall *)(void *)'錯誤的位置就在創建線程里的(LPTHREAD_START_ROUTINE)ThreadFunction上,還問高手這怎么回事啊????錯誤提示是'type cast' : cannot convert from '' to 'unsigned long (__stdcall *)(void *)'
3 回答

繁星點點滴滴
TA貢獻1803條經驗 獲得超3個贊
你可以參考下。
你要是調用 CreateThread 函數的話,那么線程過程函數不是隨便定義的。他要求一個標準的返回值
DWORD WINAPI ThreadFun(LPVOID para);
參數名和函數名你可以隨意,其他不要變。
你編譯器中返回的錯誤也說了,CreateThread的第三個參數的返回值不能是void,必須是一個 'unsigned long (__stdcall *) 并且參數是(void *) 的函數地址值。
看到這個錯誤提示后,你就應該照著提示區改就可以了。將你的函數聲明按照提示更改就一切ok了。
DWORD WINAPI 就是 unsigned long (__stdcall *) 的一個宏。

泛舟湖上清波郎朗
TA貢獻1818條經驗 獲得超3個贊
DWORD WINAPI ThreadFunction( LPVOID p )
{
MessageBoxA( NULL, "", "這是子線程", 0 );
}
...
HANDLE hThread = CreateThread( NULL, 0, ThreadFunction, NULL,
NULL, NULL );
CloseHandle( hThread );
你的基礎還很薄弱,先從最基本的C、C++的語言本身學起。等掌握了C或者C++,再來學習Windows API。
添加回答
舉報
0/150
提交
取消