- ベストアンサー
CreateThreadのエラー
<プログラム環境> Windows XP VC++6.0 MFC AppWizard(exe) ダイアログベース <質問> 何も実行しないスレッドを作成するようにコーディングしたのですが、 「error C2440: 'type cast' : '' から 'unsigned long (__stdcall *)(void *)' に変換することはできません。」 というエラーが出ました。 これは、何が原因で、解決方法はありますか? <ソース> void CMyDlg::OnButton1() { HANDLE handle; DWORD id; handle = CreateThread(0,0,(LPTHREAD_START_ROUTINE)ThreadFunc,NULL,0,&id); } void CMyDlg::ThreadFunc(void) { } <ヘッダ> void ThreadFunc(void); 宜しければご指摘お願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
MFCでスレッドを使用する場合は、CreateThreadではなくAfxBeginThreadを使用した方が安全です。 あとスレッド関数はstaticで宣言しましょう。
その他の回答 (1)
- php504
- ベストアンサー率42% (926/2160)
回答No.2
エラーの原因はThreadFuncをクラスのメンバー関数として作成したためだと思います。 クラスメンバーの呼び出し規約は __thiscall になるため __stdcall に変換できないということだと思います。
質問者
お礼
php504様有難うございます。 エラーの原因が分かり納得出来ました。 有難うございました。
お礼
enta1331様有難うございます。 AfxBeginThreadを使って、マルチスレッド出来ました。 有難うございました。