掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
スレッド処理について (ID:58643)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
私が以前作ったのはこんな感じ。結構使いまわしてます。 #define WM_STOPTHREAD WM_USER + 5050 #define WM_STEPTHREAD WM_USER + 5051 ///////////////////////////////////////////////////////////////////////////// // CDoingDlg ダイアログ ( だせえネーミング!! ) class CDoingDlg : public CDialog { // コンストラクション protected : CDoingDlg(CWnd* pParent = NULL); // 標準のコンストラクタ public: CDoingDlg(CWnd* pParent ,int count , UINT(*thread)(LPVOID pParam) ); // ダイアログ データ //{{AFX_DATA(CDoingDlg) enum { IDD = IDD_DIALOG_DOING }; // メモ: ClassWizard はこの位置にデータ メンバを追加します。 //}}AFX_DATA public : int GetError(){return m_iError ;}; int GetEndCount(){return m_iEnd;}; protected: int m_iEnd ; int m_iError ; int m_iCount ; UINT (* m_thread )(LPVOID pPalam ) ; // 生成されたメッセージ マップ関数 //{{AFX_MSG(CDoingDlg) //プログレスバーの初期化とスレッドスタート virtual BOOL OnInitDialog(); //中止ボタン afx_msg void OnDoingStop(); //矢印つき砂時計カーソル afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); //}}AFX_MSG //プログレスバーのStepIt(WM_STEPTHREADのメッセージハンドラ) afx_msg LRESULT OnStep(WPARAM wParam , LPARAM lParam) ; //スレッド終了(WM_STOPTHREADのメッセージハンドラ) afx_msg LRESULT OnStop(WPARAM wParam , LPARAM lParam) ; DECLARE_MESSAGE_MAP() }; extern volatile BOOL stop_thread ; スレッドからはループ毎にWM_STEPTHREADを送ってもらう。 終了時にWM_STOPTHREADを送ってもらう。 中止ボタンを押したらグローバル変数のstop_threadをTRUEにする。 スレッドはstop_threadを確認したらWM_STOPTHREADを送って終了。 勿論スレッドに渡すのはHWND。スレッド内でCWnd::FromHandle使ってます。 isshiさんが言うように独自のメッセージを使うほうが便利です。 wParamやlParamを使って進捗と成功/失敗の情報も受け取れるから。 volatileははじめて知りました。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.