VC++でユーザーインターフェイススレッドを作成する方法

このQ&Aのポイント
  • VC++でユーザーインターフェイススレッドを使って、ボタンが1つあればいいだけの別スレッドダイアログを作る方法を教えてください。
  • CWndThreadクラスを使用する必要がありますが、具体的なコーディング方法についてはわかりません。
  • 助けていただけると幸いです。
回答を見る
  • ベストアンサー

ユーザーインターフェイスの一番単純なスレッドを教えてください。

 こんにちわ。 いきなりですが、VC++でユーザーインターフェイススレッドを使って、 ボタンが1つあればいいだけの別スレッドダイアログを作らなくちゃならないの です。 CWndThreadクラスを使う。。。とかCWndThreadクラスの関数を オーバーライドしなくちゃならないらしいとか、MSDNのヘルプを見てそこまでは わかったのですが、実際、何をどう作っていいのか、途方にくれています。 サンプルを入手して、ソースを追っかけてみているのですが、MSDNのサンプルは 余計な機能とかがいっぱい入っていて、「本当に必要なコードはこれ!!」 というのがよくわかりません。 どなたか、すっごーく単純なスレッド作成、スレッド側の最低限コーディング を教えてください!!というか、助けてください!!!!

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

  • ベストアンサー
  • osaosa42
  • ベストアンサー率60% (20/33)
回答No.1

簡単なサンプルです。 -------------------------------------- //スレッドからの呼び出し関数 UINT SendAutoThread(LPVOID pParam){ //ここにスレッドの処理を書く return 0; } //Hogeボタンを押したとき void CHogeDlg::OnHoge(){ //スレッド作成 CWinThread *pThread = AfxBeginThread( HogeThread,//呼び出す関数 this); } ------------------------------------------

orange_pie
質問者

お礼

ありがとうございました。 私は、AfxBeginThread()ではなく、CreateThread()を使用して 作成していたのですが、AfxBeginThread()に替えたら無事に動きました。 余談ですが、CreateThread()関数で作成したとき、 Windows98でやっていたのですが、どうしてもスレッド側の関数に 処理が行かなくて困っていたのでAfxBeginThread()に替えたらOKでした。 でも、Windows98でだめだったソースをそのままWindows2000で テストしてみたら問題なく動くんです。。。。結局、プログラムのせいでは なくて、OSに依存するってことなんでしょうか。。。。 腑に落ちない点がありますが、ターゲットはWindows98だそうなので、動くようになって一件落着しました。 ありがとうございました。

関連するQ&A

  • エディットコントロールの色の変更方法

    環境はVC++2008 MFCです。 現在ダイアログにスタティックテキストの色を変更しようと 下記HPを参考にしていますが、 「OnCtlColor関数のオーバーライド ClassWizardを使って、OnCtlColor関数をオーバーライドさせる。 」 の方法がわかりません。 http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_EDITcolor.html クラスビュー> ダイアログクラス選択> プロパティ> メッセージ を表示してみても何も表示されていませんし。 どのようにどのようにオーバーライドするのでしょうか? また、オーバーライドの方法をクラスウィザードを使用せず 後学の為、そのままコーディングレベルでご教授頂いたとしても とてもありがたいと思います。 宜しくお願いします。

  • スレッドの作成と起動

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

  • ソース添付に Thread.class のソースが含まれていません。と

    ソース添付に Thread.class のソースが含まれていません。と出ます。 eclipsでデバッグしていると、 ーーー クラス・ファイル・エディター ソースが見つかりませんでした ---- ソース添付に Thread.class のソースが含まれていません。 下の「添付ソースの変更」ボタンをクリックすると、ソース添付を変更できます。 ーーーー と、出てきます。 eclipsは、pleiades-e3.5-phpを使っています。 ヘルプは、jdk-6u10-docs-ja.zipをダウンロードして参照しています。 ヘルプのマージとか必要なのでしょうか?

    • ベストアンサー
    • Java
  • VC++ スレッドからDoModalへ

    いまさらですがVC++6.0でつまづいています MFCです AdlgクラスのダイアログのOnButtonA() からXXXスレッドを起動し そのXXXスレッドではcountを+1しつづけます。 そして別のダイアログ DDD10をDoModalで起動しそのDDD10 内のTextBoxの値にcount値を反映させて表示しようとしました 下記ソース内のAfxMessageBox(tmp);ではcount値は 更新されますが DDD10ダイアログ内のテキストボックス の値が変更されません m_gui_xfr_totalはDDD10のテキストボックスにつけた メンバー名です どなたかアドバイスをお願いします void ADlg::OnButtonA() { DDD10 dlg10 ; CWinThread *pThread = AfxBeginThread(XXX_thread_entry,(LPVOID *)this); dlg10.DoModal() ; } void XXX_Thread(){ CString tmp; unsigned int count=0; DDD10 dlg10; while(1){ count++; tmp.Format("%d",count); dlg10.m_gui_xfr_total.Format(tmp); AfxMessageBox(tmp); Sleep(1000); } }

  • 【C++】boost threadについて

    現在visual studio 2010 を使ってC++による開発を行っています。 使用しているライブラリのソースコードを読んでいたら下記のような行を見つけたのですが、 どういった内容なのか検討が付かず、困っています。 ↓部分的で申し訳ないのですが、下記のような関数が使用されていました。   "boost::thread::yield ();"の使用例とかが解れば何がしたいのか解るのではと思っています。 --------------------------------------------------------------------------------- CloudViewer_impl (const std::string& window_name) : window_name_ (window_name), has_cloud_ (false), quit_ (false) { viewer_thread_ = boost::thread (boost::ref (*this)); while (!viewer_) { boost::thread::yield (); } } --------------------------------------------------------------------------------- 参考になるかと思い、std::this_threadのyield関数を調べると下記のように説明されていました。 [yield 関数]   現在のスレッドが通常実行を継続がオペレーティング システムに他のスレッドを実行するように通知します。 boost::thread配下の関数ということで、threadの操作をするモノだということは解るのですが、 これまで、あまりthreadを触って来なかったこともあり、見当がつきません。 不躾な質問で申し訳ありませんが、簡単なサンプルでyieldの使い方、使い処など教えて頂ければ有難いです。

  • Studio2008でのスレッドの挿入方法

    Studio2008でのスレッドの挿入方法 VisualC++2008を使っている初心者です。 フォームプログラム上にRS232Cの通信を入れたいと考えていて、 スレッドを使ってプログラムを作ろうと考えているのですが、 スレッドクラスなどは、ボタンやテキストボックスみたいにツールから簡単に作成できるのものではないのでしょうか? (ひょっとしたら簡単に基本的なスレッドを挿入する方法があるかと思いました。) もしなければ、Studioのtoolメニューからどのように作成していくものなのでしょうか? それとも全て自分でソースにコードを挿入する必要があるのでしょうか? 基本的なことから始めますので、簡単な挿入方法があるのなら教えてください。 (サイトで見かけるスレッドのサンプルコードはなかなかイメージがわいてきません)

  • ボタンの表示の色、フォントを変更したい

    VC++でプログラミングしています。 MFCのダイアログベースのEXEを造っています。 ダイアログにはボタンとエディットボックスを貼り付けています。 私がやりたいのは以下のことです。 ・ボタンの色を設定したい ・ボタン、エディットボックスに表示する文字の色を設定したい ・ボタン、エディットボックスに表示する文字のフォント(サイズ)を設定したい プロパティでサイズ変更すると全体に反映されてしまうので、個々の コントロールについて制御したいと思っています。 ヘルプで調べて、それらしい関数を見つけるのですが使い方がわかりません。 VCを始めたばかりで、クラスの理解がまだ浅いです。。。 関数の説明は理解できても、「じゃあ、コードはどう書くの?」という状態です。 「○○ は ×× のメンバではありません」と、よく怒られてます。。。 識者の方、ご教授願います。 コードがどうなるのか知りたいので、簡単なサンプルコードがあると助かります。 また、質問ではないのですが、「この関数は○○をする」というのではなく、 「○○をするにはこの関数を使う」という様に調べられる、お勧めの書籍、 Webなどがありましたら教えてください。 今後の勉強に役立てたいと思っています。

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

    <プログラム環境> 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++でEUC->ShiftJIS変換

    現在、VC++はじめて1週間です。MSDNがない為HELPが参照出来ません。 VC++にてプログラムを作成しているのですが、EUC→ShiftJIS変換を行いたいのですが、関数は用意されているのでしょうか。 また、用意されていない場合、フリーのライブラリ等ご存知の方がいらっしゃいましたら、教えて頂けないでしょうか。 よろしくお願いします。

  • PICTURE型

    VC++ 6.0 MFCを使っています。 スタティックボックス上にjpgファイルの画像を読み込む表示したいと思ってます。 ダイアログ上に表示することはできましたが、スタティックボックス上に表示することができません(スタティックボックスに隠れてしまいます)。 今、LPPICTURE型を用いて描画しています。 LPPICTURE型のヘルプが見つからず困ってます。 ちなみにMSDNは持っていません。 LPPICTURE型について記述したページがあれば教えてください。 よろしくお願いします。