![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
VC++.NETでWindowsフォームアプリを作っていて、WindowMessageを使おうと思っているのですが質問させてください.
簡単にいえば、WindowsMessageの追従性というか、処理速度が知りたいのです.(以下の説明で、受信側、送信側は1回目の送受信において定義しています。CUI=受信側、GUI=送信側と考えてもらって構いません)
内容をわかりやすくするために例をあげて説明します。
●メッセージ受信側のプログラム内容(CUIと仮定)
WindowMessageで受け取った1~9の数字を利用した(任意の)プログラム。(いろいろと計算を行い)計算結果を一度コンソールに出力、そしてWindowMessageを利用してその内容をGUI側に返す。
●メッセージ送信側のプログラム内容(GUIと仮定)
Timerオブジェクトを利用して間隔1msec(最小)で(たとえば1~9の乱数を生成して)WindowMessageを送信する。
CUI側から帰ってきた数字は次の乱数生成時のseedに使う。
質問1
受信側のプログラムが(例えば受け取った数字をコンソールに表示する程度の)軽い内容だったとして、「コンソール出力」という処理はきっちり1msecはいかないにしても数msec単位で処理されるのか?(つまり、WindowMessageの処理の限界速度?が知りたい)
質問2
現状だと「GUI側から極めて短い間隔でどんどんWindowMessageが送られる」という状態になっていると思います。
WindowMessageの処理についてまだあまり勉強が進んでいないのでわからないのですが、この状態において、1発目のWindowMessageを処理している間に次のWindowMessageが来た場合、CUI側でどのような処理が行われるのでしょうか。
質問3
要は処理をGUI→CUI→GUI→CUI→GUIという順番で逐次処理させたいのですが、結局その目的に対して、WindowMessageは(一応)有効な手段なのか?
以上、一部分かりにくい表現があるかもしれませんが、回答のほどよろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
質問1、たぶん、いいえ。
タイマーを1m秒に設定しても、実際には15m秒とかになっちゃうみたい。「VB.NETのタイマー精度を測る」人が google で検索すると見つかります。こういうのはハードウェアによるかもしれません。質問2、いいえ。あなたのデザインではGUIは次の種を受け取ってないので(CUIからの返答なしに)、次を送信することがありえません。
質問3、はい、一応。送信(Send)は同期だと思います。でも、タイマーはキューかもしれないので溜まっちゃうのかもしれません。
No.1
- 回答日時:
質問1
まず、Windowsのタスクの切り替えの仕組みを理解してください。
http://itpro.nikkeibp.co.jp/article/COLUMN/20070 …
メッセージを送ったからといって通信先のタスクがすぐアクティブになる補償はなにもありません。
数msかも知れませんし、数十ms後かもしれません。あるいは、200ms後かも知れないです。
質問2
メッセージキューに溜まって行くだけです。
>CUI側でどのような処理が行われるのでしょうか。
どんなプログラムになっているか分かりませんが、GetMessageとかしているなら、1つづつメッセージを取り出して処理するだけです。
質問3
お互いにメッセージを待つなら、GUI→CUI→GUI→CUI→GUIと実行されますが、どちらかが待たない場合には、GUI→GUI→GUI→GUI→GUI→CUI→CUI→CUI→CUIとなったりします。
ただ、お互いに同期を待つ処理は非効率的なので、普通はそうならないように設計します。一回のやり取りに0.5秒掛かってもWindowsOSの仕様上は仕方のないことです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- 国家公務員・地方公務員 公務員試験の数的処理で苦戦しています。 1 2023/01/30 08:56
- その他(OS) WindowsServer2019でWORKGROUPのRDSの設定 1 2023/02/15 17:43
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- サーバー 接続・ログインはできているのにメールが送信できない 2 2022/06/27 15:03
- 大学院 修士論文の過ちを報告した際 2 2023/03/30 20:55
- その他(開発・運用・管理) WindowsからSSHでサーバーにあるファイルをダウンロードできない…。 3 2022/04/24 11:08
- その他(データベース) 業務用のデータベースサーバーの選び方について 4 2022/11/22 10:22
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelでのセル内容の高速消去方法
-
Excel VBA での処理時間計測結...
-
絶対パスの取得について
-
clispの実行方法
-
小数点を含む数値かどうか判断...
-
Excel VBA データ削除の高速化
-
DoEvents関数って何?
-
ポインターの横に輪が回ってる。
-
C言語で、文字とか入力されなく...
-
プログラミングの授業でPython...
-
VB 電卓 メモリー機能
-
C言語 時刻差分の算出方法
-
プログラム上のCPU稼働率低減に...
-
ファミリーベーシックのDATAの...
-
簡単に同時アクセスをコントロ...
-
VBAでリアルタイムで計算結果を...
-
膨大データ処理を高速化したい
-
C言語について
-
再帰について(C言語)
-
非同期プログラミングは必ずマ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelでのセル内容の高速消去方法
-
DoEvents関数って何?
-
win10で、正確な待ち時間の作り方
-
小数点を含む数値かどうか判断...
-
Excel VBAにて、2GB超の点群デ...
-
SQLの速度をあげるには・・・
-
絶対パスの取得について
-
WebBrowserの読み込み待ちの処...
-
プログラム上のCPU稼働率低減に...
-
C言語 再帰処理のメリットとデ...
-
テキストファイルの空行をスキ...
-
実行時のCPU使用率を増やしたい
-
C言語 時刻差分の算出方法
-
Excel VBA データ削除の高速化
-
VBでの簡易電卓の作成(減算方...
-
Excel(VBA)でSetTimer関数を使...
-
プログラミングの授業でPython...
-
If Not c Is Nothing Then ~延...
-
C言語で、文字とか入力されなく...
-
C言語:関数を使うメリットとデ...
おすすめ情報