A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
1)MFCらしくは扱えませんが、コールバックが呼ばれるときに作成されるスレッドもGetCurrentThreadで取得する擬似ハンドルでアクセスできると思います。
このハンドルは自分自身のスレッドを指す特殊な定数なので、他のスレッドから参照する必要があるのならDuplicateHandleで複製してやる必要があります。でも、コールバックに対して、そのような事はしたことがないので無理かもしれません。3)デフォルトの動作が必要ない種類のものだから、無いと思います。
No.2
- 回答日時:
1について
CWnd::OnTimerはWin32ネイティブでは::SetTimer()で起動され、WM_TIMERメッセージのハンドラとしてキャッチされます。
::SetTimer()ではTimerProc関数のポインタを指定できますが、ここに指定したとしても、実際にはメッセージキュー経由で起動されるため、結局の所CWnd::OnTimerfハンドラでは新たなスレッドは起動されていません(ウィンドウプロシージャ内で時間のかかる処理を実行してその時間より短い間隔でTimerイベントを発生させるようにしていれば確認できます)。
なのでCWnd::OnTimerのスレッドハンドルはウィンドウプロシージャのスレッドハンドルそのものです。よってそれを知る事が出来ればスレッドを捕まえる事も出来るでしょう(多分PSAPI(NT/2000)やToolhelp32(9x/Me/2000)を使う事で取得できるかもしれません)。
2について
Win32の設計やMFCの設計がそうだから(^^;
itohhさんと同じく、仕様だからとしか言えませんねぇ(^^;
3について
ありません。というより実体はWM_TIMERのハンドラですから未定義時は::DefWndProc()に流れるようになっているだけでしょう。
MFCのメッセージハンドラ自体、マクロではなくコンパイラ内で処理されているような感じを受けます。CWnd::OnTimer自体がMFCソース内に無いようですし・・・
# OnTimerのくだり(1について)はたしかProgramming Windowsあたりに載ってたと思います。なんかの書籍からウラを取ったのは確かなんですが、どの書籍かはいまいちはっきりしないので・・・
# CWnd::OnTimerでは新規のスレッドが起きない&メッセージキュー経由なので遅延が発生しやすいので、新規にスレッドを起こしたい場合、timeSetEvent()(マルチメディアAPI)の方を使ってください。こちらの方が精度が高く、メッセージキューを経由せず、独立したスレッドが生成されます。
ありがとうございました。
2については仕様ということで自分に言い聞かせます。
3についてはOnTimer内でハンドルを変数へ渡し、実装しようと考えました。それができれば関数を使わずにハンドル取得ができるのかと思ってみました。
お忙しい中、ご教授感謝しております。
No.1
- 回答日時:
こんにちは。
itohhといいます。ちょっと、質問の意味がわからないのですが。
(1)について。
SetTimer関数で設定された秒数の経過後にOnTimerイベントが呼び出されるというのでは
いけないのでしょうか?
(2)について。
それは、「仕様です。」ではダメ?
newで作成したオブジェクトの戻り値はオブジェクトのアドレス(ハンドル)ですよね?
それと、同様だと思うのですが...
(3)について。
中身を見るってどういう事を意味しているのでしょうか?
OnTimerイベントのときの処理を書きたい、という意味でしょうか?
それならば、クラスウイザードでOnTimerイベントを追加してください。
ソースファイルにOnTimer関数のテンプレートが出来るはずですから、処理を追加
してください。
(注)スレッドには2種類有ります、ワーカースレッドとユーザインターフェース
スレッドです。
ユーザインターフェーススレッドでないと、OnTimerイベントは拾えません。
ワーカースレッドで行いたい場合は、独自のメッセージポンプを実装
しなければいけません。
いろいろ細かくご教授ありがとうございました。
1つ1つの質問を丁寧に教えていただけたのですが、勉強する時間が長すぎて、不採用になってしまいました。
でも、これから自分なりにゆっくり勉強していきます。
また、その時はよろしくお願いします。
VCを触って早3ヶ月も経つのにわからないことだらけでやになります。愚痴を言ってしまいました。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- バイク免許・教習所 教習所について 2 2023/05/22 20:44
- ポイントサービス・マイル お金を出さないとポイントをくれないって、なんか変 何かシステム上の意図があるのでしょうか? 6 2022/11/08 13:30
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- 日本株 楽天RSS2での移動平均の取得について 1 2022/07/28 21:48
- Excel(エクセル) Excelのマクロで、特定のセルから順番に値を取得したい 5 2022/12/06 15:34
- 介護福祉士・ケアマネージャー・社会福祉士 運転免許再取得について 1 2022/04/05 18:06
- 個人事業主・自営業・フリーランス 古物商許可証(個人)について質問です。 取得のための概要を見たところ、特に個人事業主である必要や、な 3 2022/10/23 17:37
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- オンラインゲーム 黒い砂漠 ガクツナックの知識の取得方法 2 2022/04/03 08:14
- iPhone(アイフォーン) iPhone5Cのアクティベーションロック を外す方法 1 2022/04/26 23:06
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
MFCのタイマーのつかい方を教えてください
C言語・C++・C#
-
win32api複数のタイマーを同時に処理するには
C言語・C++・C#
-
メッセージハンドラ
C言語・C++・C#
-
-
4
MFCのワーカースレッドとUIスレッドの使い分け
C言語・C++・C#
-
5
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
6
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
7
VC++2005で、CString型に16進文字列を入れたいのですが・・
C言語・C++・C#
-
8
他のウィンドウのボタンを自動的に押したい
C言語・C++・C#
-
9
MFCで画像を表示させているのですが、透過表示する方法がわかりません。
C言語・C++・C#
-
10
CString から LPCTSTRの型に変換
C言語・C++・C#
-
11
WORD型をCString型に変換する方法
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スレッドにて同一メモリの書き...
-
WaitForSingleObjectの使い方に...
-
マルチスレッドプログラミング...
-
VC++スレッドの正しい終了のさ...
-
gprofとスレッドについて
-
スレッドの終了はどうやるんで...
-
マルチスレッドでブレイクポイ...
-
Windows上で、シグナル(SIGTERM...
-
C# スレッドから親ウィンドウへ...
-
VC++ スレッドからDoModalへ
-
VB2005 シリアル通信のClose処理
-
Macターミナルで実行中のプログ...
-
バックグラウンドのプロセスの...
-
C言語で、メモリを解放しないで...
-
Webプログラムってネイティブア...
-
TCP/IP通信時のサーバーからの受信
-
メッセージボックスのボタン名変更
-
explorer.exeが異様にメモリを食う
-
ソケットのクローズについて
-
PLCとPCの通信
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WaitForSingleObjectの使い方に...
-
スレッドの安全な終了のさせ方
-
VC++スレッドの正しい終了のさ...
-
スレッドの監視方法について
-
スレッドの終了はどうやるんで...
-
スレッドにて同一メモリの書き...
-
Windows上で、シグナル(SIGTERM...
-
別スレッドのデータを受信できない
-
VB2005 シリアル通信のClose処理
-
複数スレッドを動作させるのに...
-
マルチスレッドプログラミング...
-
MFC通信プログラムマルチスレッ...
-
マルチスレッドの実行順序の制御
-
スレッドの終了の仕方
-
msec単位のWait Timerが作れない!
-
マルチスレッド内のループについて
-
C++でマルチスレッド処理をさせ...
-
待機関数(WaitForMultipleObjec...
-
メモリアクセスの競合について
-
同一スレッドで、ロックをかけ...
おすすめ情報