C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: PCがスリープ状態に入る時間を知りたい


(過去ログ 76 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■45106 / inTopicNo.1)  PCがスリープ状態に入る時間を知りたい
  
□投稿者/ 瀧本 (1回)-(2009/12/30(Wed) 10:20:07)

分類:[VB.NET/VB2005 以降] 

現在 VB 2008 である機器からのデータをRS232C 経由で取り込み処理するシステムを作っています。 200mSの間隔で取り込む
プログラムで、通常は動作してくれますが、問題があります。 PCがスリープ状態になり、復帰後エラーとなり、その後はポートが
全く使えなくなり、PCをシャットダウンしなければなりません。  特にPCをシャットダウンするのはマヅイです。 この解決には2つあり、ひとつはエラー処理です。 しかしエラー処理として Catch ex As IO.IOException として ポートを Dispose していますが、ダメです。 ちなみに COMポートを使う Tera-Termも同じような状態になりますので、エラー自動回復は無理かなと勝手に想像しています。 そこで PCがスリープ状態になるのを事前に察知できないかと考えたのですが、方法が分かりません。 Webでいろいろ検索しても見つかりません。 どなたか教えていただけると助かります。 対応OSはVista、XP です。
引用返信 編集キー/
■45110 / inTopicNo.2)  Re[1]: PCがスリープ状態に入る時間を知りたい
□投稿者/ .SHO (1088回)-(2009/12/30(Wed) 13:49:09)
「画面の設定」でスリープなしにしてはダメなんですか?
引用返信 編集キー/
■45112 / inTopicNo.3)  Re[2]: PCがスリープ状態に入る時間を知りたい
□投稿者/ 瀧本 (2回)-(2009/12/30(Wed) 15:50:09)
No45110 (.SHO さん) に返信
> 「画面の設定」でスリープなしにしてはダメなんですか?

レスありがとうございます。 最後の手段はそうせざるを得ないですが、できるだけスリープを使うことを想定したいです。
(場所によってはスリープの設定が必須のところ(離席時のセキュリティー)があります。)

引用返信 編集キー/
■45113 / inTopicNo.4)  Re[3]: PCがスリープ状態に入る時間を知りたい
□投稿者/ なちゃ (349回)-(2009/12/30(Wed) 16:12:38)
多分スリープに入るよってメッセージは飛んでくるはずだと思いますが、
ポートがスリープに対応出来ないものなら察知してもどうすることもできなくないですか?
仮にスリープをキャンセル出来たとしても、それではセキュリティーとかの要件に合わなくなるでしょうし。

スリープなし前提で、パスワードロックにしてもらうとかではダメなんですかね?

引用返信 編集キー/
■45114 / inTopicNo.5)  Re[4]: PCがスリープ状態に入る時間を知りたい
□投稿者/ Hongliang (535回)-(2009/12/30(Wed) 18:53:10)
Microsoft.Win32.SystemEvents クラスの PowerModeChanged イベントで検出できます。
// 最終的にやりたいことを実現できるかどうかは存じませんが。
引用返信 編集キー/
■45115 / inTopicNo.6)  Re[4]: PCがスリープ状態に入る時間を知りたい
□投稿者/ 渋木宏明(ひどり) (1260回)-(2009/12/30(Wed) 19:17:23)
渋木宏明(ひどり) さんの Web サイト
> 多分スリープに入るよってメッセージは飛んでくるはずだと思いますが、

のはず。

また、「スリープから復帰したよ」通知もあったはず。

> ポートがスリープに対応出来ないものなら察知してもどうすることもできなくないですか?

例えば、USB 接続のシリアルポートなんか、スリープ中にデバイスそのものが取り外されてしまっている場合もあるわけです。

なので「スリープを考慮する」なら

・「スリープに入るよ」通知でポートを閉じる
・「スリープから復帰したよ」通知で再度ポートを開き直す

とか、そーゆーことしないと駄目だと思う。
引用返信 編集キー/
■45116 / inTopicNo.7)  Re[5]: PCがスリープ状態に入る時間を知りたい
□投稿者/ オショウ (492回)-(2009/12/30(Wed) 22:15:32)
Hongliangさんの言われるとおり、イベントは取得できます。

次にシリアルポートですが・・・
それは本体ポートのことを言っているのか、USB変換でのポート
を言っておられるのか・・・

それによって対処が変わります。

と言うのも、スリープ化するイベント段階でポートをクローズ
すると言うのは、実質間に合うか・・・と言うタイミング的な
問題があります。

間に合わない場合、間違いなく復帰後、PC再起動です。

FAのソフト屋やってますので、各種ボード・デバイスとの通信
は日常茶飯事で・・・このスリープ・復帰は、大問題なのです。

一般的にどのハードメーカーも復帰後のデバイスの正常化には
消極的で、スリープモードに対応してません。とマニュアルに
但し書きしているところも少なくありません。

よって、現在為しえようとしていることは、徒労かもしれませ
ん。

因みに、解決策とまでは言い切れませんが、一般アプリにイベ
ントが来る前(時間的に以前と言う意味)にWindowsサービス
側では捕捉できる傾向がありました。

よって私はスリープ化等PCの状態が変化する場合は、デバイ
スとの通信機能は、全てWindowsサービスで作って、電源等の
状態変化の場合は、いち早くポートをクローズしデバイスを
未使用にして・・・復帰したらオープンし機能を再開させて
います。

今のところ、この方法でトラブルにはなってません。

※ 程度問題かと思いますが・・・

以上。参考まで
引用返信 編集キー/
■45117 / inTopicNo.8)  Re[6]: PCがスリープ状態に入る時間を知りたい
□投稿者/ .SHO (1089回)-(2009/12/30(Wed) 22:55:21)
> と言うのも、スリープ化するイベント段階でポートをクローズ
> すると言うのは、実質間に合うか・・・と言うタイミング的な
> 問題があります。

これは間に合うんじゃないですかね?
少なくともイベントからOSに制御を戻すまでは
実際にスリープはしないんじゃないのかな?

引用返信 編集キー/
■45118 / inTopicNo.9)  Re[7]: PCがスリープ状態に入る時間を知りたい
□投稿者/ Azulean (490回)-(2009/12/30(Wed) 23:31:37)
2009/12/30(Wed) 23:34:27 編集(投稿者)

No45117 (.SHO さん) に返信
> 少なくともイベントからOSに制御を戻すまでは
> 実際にスリープはしないんじゃないのかな?
少なくとも Vista 以降の OS については、そんなことはありません。
あまり猶予なしにスリープに入ります。

http://msdn.microsoft.com/en-us/library/aa372721.aspx
引用返信 編集キー/
■45119 / inTopicNo.10)  Re[8]: PCがスリープ状態に入る時間を知りたい
□投稿者/ オショウ (493回)-(2009/12/30(Wed) 23:48:04)
No45118 (Azulean さん) に返信
> 2009/12/30(Wed) 23:34:27 編集(投稿者)
> 少なくとも Vista 以降の OS については、そんなことはありません。
> あまり猶予なしにスリープに入ります。

  私もVISTAで経験しました。
  問答無用にスリープに入ります。

  ので、沢山常駐アプリなんかがあれば、自身にまで
  イベントが伝播する前にスリープに陥る・・・と言
  う場合も想定されます。

  またイベント受信後、本当に短時間で処理を終えな
  いと、異常終了的に終わらせられてしまうのでもた
  もたできません。ファイルに何か情報を書き戻して
  なんかも間に合わない場合が当然あります。

以上。
引用返信 編集キー/
■45123 / inTopicNo.11)  Re[9]: PCがスリープ状態に入る時間を知りたい
□投稿者/ .SHO (1090回)-(2009/12/31(Thu) 08:21:26)
No45119 (オショウ さん) に返信
> ■No45118 (Azulean さん) に返信
>>2009/12/30(Wed) 23:34:27 編集(投稿者)
>>少なくとも Vista 以降の OS については、そんなことはありません。
>>あまり猶予なしにスリープに入ります。
>
>   私もVISTAで経験しました。
>   問答無用にスリープに入ります。

ひぇ〜、、VISTA以降はそうなんだ。
じゃぁ、イベントなんてもらっても意味ないですねぇ。
つか、さっさと終わらないと異常終了させられちゃうんじゃ
イベントなんてもらわない方がいいなぁ。。。
引用返信 編集キー/
■45126 / inTopicNo.12)  Re[9]: PCがスリープ状態に入る時間を知りたい
□投稿者/ 瀧本 (3回)-(2009/12/31(Thu) 11:18:48)
No45119 (オショウ さん) に返信
> ■No45118 (Azulean さん) に返信
>>2009/12/30(Wed) 23:34:27 編集(投稿者)
>>少なくとも Vista 以降の OS については、そんなことはありません。
>>あまり猶予なしにスリープに入ります。
>
>   私もVISTAで経験しました。
>   問答無用にスリープに入ります。
>
>   ので、沢山常駐アプリなんかがあれば、自身にまで
>   イベントが伝播する前にスリープに陥る・・・と言
>   う場合も想定されます。
>
>   またイベント受信後、本当に短時間で処理を終えな
>   いと、異常終了的に終わらせられてしまうのでもた
>   もたできません。ファイルに何か情報を書き戻して
>   なんかも間に合わない場合が当然あります。
>
> 以上。

皆さん いろいろアドバイスありがとうございました。 おかげさまで PowerModeChanged イベント を使い、サスペンドに入ったらフラグを立て、通信を中断し、復帰のイベントで再開させるプログラムが出来ました。 処理時間はフラグを立てるだけですので、今のところ問題にはなっていません。 これで気持ちがすっきりしたお正月が迎えられます。 皆さんも良いお年をお迎えください。  

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -