• ベストアンサー

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); 宜しければご指摘お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • penta1331
  • ベストアンサー率64% (16/25)
回答No.1

MFCでスレッドを使用する場合は、CreateThreadではなくAfxBeginThreadを使用した方が安全です。 あとスレッド関数はstaticで宣言しましょう。

meeyooyoo
質問者

お礼

enta1331様有難うございます。 AfxBeginThreadを使って、マルチスレッド出来ました。 有難うございました。

その他の回答 (1)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

エラーの原因はThreadFuncをクラスのメンバー関数として作成したためだと思います。 クラスメンバーの呼び出し規約は __thiscall になるため __stdcall に変換できないということだと思います。

meeyooyoo
質問者

お礼

php504様有難うございます。 エラーの原因が分かり納得出来ました。 有難うございました。