• 締切済み

スレッドの作成と起動

<プログラム環境> Windows XP VC++6.0 MFC AppWizard(exe) ダイアログベース <質問> ボタンを押すとOnButton()に入ります。 OnButton()内でワーカースレッドを起動させたいのですが、 どのようにコーディングするのでしょうか? スレッドの作成方法も分かりません・・。 宜しければご指摘お願い致します。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

スレッドプロシージャを定義しておいて AfxBeginThreadを使ってスレッドを作成します AfxBeginThreadのオプションでサスペンドモードで起動したなら ResumeThreadでスレッドを起こしましょう VC++付属のMSDNで『スレッド MFC』などで調べてみましょうね

noname#75489
noname#75489
回答No.1

googleで検索すればサンプルプロジェクトがたくさん見つけられると思います。

参考URL:
http://www.anime-soft.com/~onogin/soft/tips/threaddemo.htm

関連するQ&A

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

  • ボタンが押された事を検知するには?

    <プログラム環境> Windows XP VC++6.0 MFC AppWizard(exe) ダイアログベース <目的> 1.ダイアログにボタン1を配置する 2.処理A(無限ループ)を開始する 3.処理Aの先頭でボタン1が押されたか判断する 4.ボタン1が押された場合処理Aを終了し、処理Bを行う というプログラムを作成する。 <質問> 目的のプログラムを作成するには、ボタン1が押された事を検知する 必要があると思うのですが、その方法が分かりません。 ボタンが押された事を検知するにはどうしたら良いのでしょうか? 宜しければご指摘お願い致します。

  • マルチスレッドのスレッド数を増やしたい

    <プログラム環境> Windows XP VC++6.0 MFC AppWizard(exe) ダイアログベース <質問概略> CWinThread*を使って無限ループのスレッドを作ったのですが、 無限ループのスレッドをもう一つ作り、同時に実行しようとするとアクセスバイオレーションのエラーでます。 複数スレッドの作り方を教えていただけますと幸いです。 <質問詳細> 現状の正常に実行できるソースの必要最小限を書きます。 <.h> class CMyDlg : public CDialog{ public:   static UINT ThreadFunc( LPVOID pParam );   void Thread(); // スレッドの処理 protected:   CWinThread* m_pThread;//スレッドのアドレス }; <.cpp> void CMyDlg::OnButton(){   m_pThread = AfxBeginThread( ThreadFunc, this );   for(;;) /*無限ループ処理1*/ ; } UINT CMyDlg::ThreadFunc( LPVOID pParam ){   ((CMyDlg*)pParam)->Thread();   return 0; } void CMyDlg::Thread(){   for(;;) /*無限ループ処理2*/ ; } これに、 void CMyDlg::Thread2(){   for(;;) /*無限ループ処理3*/ ; } のようなスレッドを追加したいのですが全然出来ません。 宜しければご指摘お願い致します。

  • VC++ Workerスレッドを強制終了させる方法

    VC++6.0でwinアプリを作っています。 ダイアログベースで、ボタンを押すとワーカースレッドを実行し、ここでデータ処理をしています。 もし、スレッド中でデータ処理時間がかかってしまうと、これをスレッド外で強制的に終了させたいですが、出来るのでしょうか。 よろしくお願いします。

  • BOOLの初期値は?

    <プログラム環境> Windows XP VC++6.0 MFC AppWizard(exe) ダイアログベース <質問> BOOL bl; と宣言した後、必ず bl = FALSE; と初期値を入れているのですが、元々FALSEかTRUEのどちらか、 決まった初期値が入っているのでしょうか?

  • wsprintfで浮動小数を扱うには?

    <プログラム環境> Windows XP VC++6.0 MFC AppWizard(exe) ダイアログベース <質問> wsprintf(a,"%f",b); MessageBox(a); で実行すると"f"が出力されました。 浮動小数を出力するにはどうしたら良いのでしょうか? よろしくお願いします。

  • スレッド処理からダイアログを表示するには?

    Windows XPとVC++ 6.0で 時間のかかる大量の計算をするプログラムを作っています。 計算部分はスレッド処理にして 進捗ダイアログ(CDialogにCProgressCtrlを貼り付けたもの) を表示します。 ・CWinAppのInitInstanceで計算処理開始(AfxBeginThread) ・計算処理内で進捗ダイアログをCreate ・計算の進み具合によって進捗ダイアログのプログレスバーを更新 上記の流れではうまくいっていたのですが 以下のように変更したところ、進捗ダイアログをCreateするところで プログラムが応答なしになってしまうようになりました。 ・メインダイアログ(モーダル) ・メインダイアログのAボタンクリックでダイアログAを開く(モーダル) ・ダイアログAの実行ボタンクリックで計算処理開始(AfxBeginThread) ・計算処理内で進捗ダイアログをCreate ・計算の進み具合によって進捗ダイアログのプログレスバーを更新 MFC Wizardでダイアログベースで作成、MFCの共有DLLを使用しています。 モーダルダイアログ→スレッド→CDialog.Createに 制限があったりするのでしょうか。 どうかご教授ください。

  • スピンボタンの使い方

    <プログラム環境> Windows XP VC++6.0 MFC AppWizard(exe) ダイアログベース <症状> ダイアログエディタでスピンボタンを配置し、ClassWizardでCSpinButtonCtrl型のメンバ変数を追加しました。 その後コンパイルするとエラー出ないのですが、実行出来ませんでした。 デバッグをすると、「ハンドルされていない例外は、試作.exeに あります:0xC0000005: Access Violation。」 が表示されて、それ以上先には進めません。 メンバ変数を削除すると、症状は無くなります。 <質問> メンバ変数を追加するだけで何故このような症状が出るのでしょうか? スピンボタンでは 初期値40 レンジ:0~80 増加幅:10 減少幅:-10 で設定したいのですが、どのようにしたら良いのでしょか? 宜しければご指摘お願い致します。

  • Viewウインドウに直接ボタンを貼り付けるには

    VC++6.0 APPWizard(exe) SDI で作成したViewウインドウにボタンを貼り付けたいのですが、どうすればよいか教えてください。 普通にダイアログにボタンを貼り付ける場合のように簡単ではないのですか?

  • ダイアログ、ボタンについて

    VC++でプログラミングしています。 MFC AppWizard(exe) でダイアログベースで造っています。 以下の方法を教えてください。 ・EXE起動時、ダイアログのサイズを変更したい。 起動時に画面サイズをチェックして、画面いっぱいの大きさにしたいため。 ・EXE起動後、ボタンに表示している文字列を変更したい。 識者の方、ご教授願います。