
No.6ベストアンサー
- 回答日時:
リストビューのウィンドウプロシージャーが LVM_SETITEMSTATE に対して、FALSE を戻すことが「できる」は仕様です。
なぜ、"その"ウィンドウプロシージャーが FALSE を戻すのかは、"その"ウィンドウプロシージャーの実装に依存すると思います。> SCツールはアイドル状態ですので、chie65535さん、の言うキューが…
>
# SendMessage() はキューをバイパスすると思います。
ウィンドウプロシジャーの実装が解らない以上どうしようもないですね
これまで通りの処理方法で行うことにします。
jmhさん、はじめみなさんご解答ありがとうございました。
No.5
- 回答日時:
> LVM_SETITEMSTATEですと成功TRUE、失敗FALSEです
>
はい。SendMessage() は、その「失敗 FALSE」を戻しているだけだと思います。失敗したのは、SendMessage() ではなくて、リストビューのウィンドウプロシージャーではないでしょうか?
SendMessage() 呼び出し → リストビューの WindowProc() 呼び出される
↓
SendMessage() が TRUE/FALSE を戻す ← WindowProc() が TRUE/FALSE を戻す
# SendMessage() はキューをバイパスすると思います。
この回答への補足
jmhさん、解りやすご説明ありがとうございます。
それにしてもリストビューのキューをバイパスしてします原因は何が考えられますででしょうか?
SCツールはアイドル状態ですので、chie65535さん、の言うキューがいっぱいと言うことは考えられないのですが・・・
No.4
- 回答日時:
> SendMessageは失敗してます。
>
貴方は、::SendMessage() の戻り値を評価してますが、
http://msdn.microsoft.com/ja-jp/library/cc411022 …
の戻り値には「メッセージ処理の結果が返ります。この戻り値の意味は、送信されたメッセージにより異なります。」とあります。
参考URL:http://msdn.microsoft.com/en-us/library/ms644927 …
No.3
- 回答日時:
::SendMessage() は成功してて、LVM_SETITEMSTATE メッセージを受け取ったウィンドウプロシージャーが false を戻してるのだと思います。
リストビュー hLV のウィンドウプロシージャーはどうなってるんですか?
この回答への補足
質問内容が曖昧で申し訳ございません。
SendMessageは失敗してます。
また別プロセスはSCツールというVNCですのでウィンドウプロシジャの実装は解りません。
私が作成したプログラム内容はchie65535さんへの補足を参照して頂けたらと思います
No.2
- 回答日時:
No.1
- 回答日時:
Windowsのメッセージキューは無限ではありません。
キューに入れられるメッセージの個数は有限です。Windowsでは、プロセスごとに「実行優先度」があり、運が悪ければ「実行優先度が低く、なかなか実行させてもらえない」と言う事が起きます。
この時「なかなか実行の順番が回って来ない」と「メッセージキューにメッセージが溜まる一方で、メッセージが処理されない」と言う事が起きます。
そして、あるタイミングで「メッセージキューが一杯になって、もうメッセージが受け取れない」と言う状態になります。
こういう状態になっているプロセスにメッセージを送ればSendMessageは失敗します。
SendMessageに失敗した場合は「他のプロセスに実行権を渡し、ある程度、他のプロセスに実行してもらい、送り先のプロセスがメッセージを処理してキューに空きが出来る事を期待」してから、もう一度、SendMessageをやり直しましょう。
なお、最初からやり直す必要はありません。単に「他のプロセスに実行権を渡す」と言うのを行ってから、失敗したのだけやり直せばOKです。
てゆ~か「定期的に特定のメッセージを特定のプロセスに送り続ける」と言うのは、場合によっては処理しきれない程の高負荷になりシステムをハングアップされる可能性があるので「やるなとは言わないが、避けた方が良い」です。
少なくとも「メッセージキューの糞詰まり」はさせない方が良いでしょう。
この回答への補足
chie65535さん、ご解答ありがとうございます。
VNCでSCツールというのがあるのですが、頻繁に落ちてしまうので落ちたら再度SCツールを立ち上げることをしています。
SCツールを立ち上げ後、リストビューから接続先を取得して・・・
ということをやっています。
上記の接続先の取得の時に、何百回に1度くらい失敗します
SCツールも待ち状態ですのでメッセージキューも空いていると思うのですが・・・
Sleep(0)でスレッドを切り替えて、再度SendMessageしましたが何度送っても失敗しました
こんな感じで試してみました
while (TRUE) {
if (::SendMessage(hLV, LVM_SETITEMSTATE, nIdx, lpvItm ))
break;
::Sleep(0);
}
すみません、テストしてもなかなか落ちないのでお返事が遅れたことお許しください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 パソコンが立ち上がりません 6 2022/10/06 00:30
- その他(メールソフト・メールサービス) Thunderbird メール受信 できない時にエラーが欲しい 1 2023/05/26 15:07
- ネットスーパー ネットショッピングで与信処理失敗とエラーが出ました!番号など正確に入力しました。残高残っています。何 2 2022/11/19 19:26
- デスクトップパソコン パソコン インテルC5i5RYH BIOSの設定方法を教えて下さい 5 2022/09/27 13:34
- Android(アンドロイド) AndroidでFirefoxブラウザーを使っていますが特定の画像がダウンロード出来ませんでした。 1 2022/09/17 13:11
- 仮想通貨(暗号通貨) 仮想通貨のワールドコインを登録したのに初回登録分のコインが入手できない? 1 2023/08/14 15:01
- VPN VPN接続が急にできなくなりました。 1 2022/12/13 15:25
- その他(海外) クレジットカードの3Dセキュアについて 日本のクレカで海外の航空会社のサイトで航空券を買う場合、ある 4 2022/08/02 11:26
- Windows 10 Windows Updateの更新ができない場合に初期化 3 2023/01/18 20:00
- 戦争・テロ・デモ 謝罪汁賠償汁飲ますのは韓国の専売特許ですか 2 2022/08/29 11:26
このQ&Aを見た人はこんなQ&Aも見ています
-
SendMessage関数がうまく動作しません
C言語・C++・C#
-
Alt+P,Alt+NをPostmessageで送るには
Visual Basic(VBA)
-
LVM_SETITEMSTATEでListViewのアイテムを選択するには?
その他(プログラミング・Web制作)
-
-
4
「タイプ初期化子が例外をスローしました」エラー何?
Visual Basic(VBA)
-
5
PostMessageの連続送信
C言語・C++・C#
-
6
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
7
SELECT 文 GROUP での1件目を取得
SQL Server
-
8
SendMessage中のメッセージ・ループについて
C言語・C++・C#
-
9
VC++メッセージの送受信について教えてください。
C言語・C++・C#
-
10
.netアプリへのSendMessageでフリーズ
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
AppActivate関数について
-
プロセスのアタッチ・デタッチ...
-
警告『 別のプロセスで使用され...
-
タスクマネージャーのプロセス...
-
Process.Startの戻り値を後で取得
-
非表示になったエクセルは?
-
Trend Micro Anti-Malware Solu...
-
SendMessageが失敗するときがある
-
AF_UNIXのsocketと共有メモリを...
-
プロセスIDの取得方法について
-
IISがフリーズ
-
sleep関数の精度について
-
win10でpythonのプロセス名を変...
-
起動中の他のプログラム(orプ...
-
完全な乱数を生成する方法
-
C++でシェルを起動
-
子プロセスのデバッグ方法について
-
特定ユーザーのプロセス情報を...
-
GPLによるソース公開の回避方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
プロセスIDの取得方法について
-
ADOでアクセスのレコードに...
-
C#でのbatファイル実行結果取得
-
タスクマネージャーのプロセス...
-
VB6.0 SHELLで起動...
-
プロセスのアタッチ・デタッチ...
-
非表示になったエクセルは?
-
怪しいプロセス教えてください。
-
sleep関数の精度について
-
【C#】別プロセスがロックか...
-
Process.Startの戻り値を後で取得
-
IISがフリーズ
-
プロセスIDからウィンドウハ...
-
Linuxでのスレッド間メッセージ...
-
Windowsでのfork方法
-
SendMessageが失敗するときがある
-
警告『 別のプロセスで使用され...
-
WSH.Runで待機できません
-
VB.NETで起動したExcelの閉じ方...
おすすめ情報