OSがスリープ状態であるときのプログラムについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
もっちー

OSがスリープ状態であるときのプログラムについて

#1

投稿記事 by もっちー » 10年前

ツイッター用のボットを作成しています。
SetTimer関数で処理待ちしているときにOSがスリープ状態になるとソケットの処理部分でエラーになってしまいます。
このスリープを回避することは可能なのでしょうか?

①スリープ状態でもソケット通信を可能にする方法
②ソケット通信するときだけスリープを解除してソケット通信する方法

一番望ましいのは①ですが、不可能もしくは②の方が簡単であれば②でもいいです。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: OSがスリープ状態であるときのプログラムについて

#2

投稿記事 by h2so5 » 10年前

(1) の方法は難しいです
そもそもTwitterBOTは常時起動しているようなサーバーで動かすのが普通だと思います。
Mac OS X には Power Nap というスリープ中に通信する機能があるようですが、サードパーティ用のAPIは提供されていないようです。

(2) はOSによってAPIが異なるのでOSがわからないと答えられないです。

もっちー

Re: OSがスリープ状態であるときのプログラムについて

#3

投稿記事 by もっちー » 10年前

h2so5 さんが書きました:(1) の方法は難しいです
そもそもTwitterBOTは常時起動しているようなサーバーで動かすのが普通だと思います。
Mac OS X には Power Nap というスリープ中に通信する機能があるようですが、サードパーティ用のAPIは提供されていないようです。

(2) はOSによってAPIが異なるのでOSがわからないと答えられないです。
すみませんでした。環境を書き忘れていました。
OSはWindows XP以降で、開発はWin32APIとWinSockをメインにVC++2010で行っております。


通常時(OSアクティブ状態)での動作チェックは問題ないです。
スリープ状態のことを思い出したので、この機能は後付という感じになってしまいます。
最悪、仕様ということでBOT起動中はスリープ状態にならないようにするということも考えましたが、
それはホントに最期の手段ということでいろいろ調べていましたが、自分では見つけられませんでした。
ということで最後の最後で質問してみようということで今回の質問に至りました。


もっちー

Re: OSがスリープ状態であるときのプログラムについて

#5

投稿記事 by もっちー » 10年前

わざわざURLまでありがとうございます。
SetTimerの前にSetThreadExecutionState(ES_SYSTEM_REQUIRED | ES_CONTINUOUS);こう書けばいいわけですよね?
その後必要がなくなりスリープになってもいい状態(KillTimerの後)になったらSetThreadExecutionState(ES_CONTINUOUS);で解除ということですね?

この場合だとこのプログラムが動作している間はスリープを制御できるようですが、
待機中はスリープさせといて、通信する間だけ解除というのはできないのでしょうか?
仮にスリープ移行が1分で、その9分後(プログラム起動から10分後)に通信し、9分30秒後には通信完了してまた待機としましょう。

[例]
プログラムの起動 12:00
スリープ 12:01~12:09
通信 12:10~12:10.30
スリープ 12:10.30~
プログラム停止

上記のようにしたいのですが、これは可能ですか?

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: OSがスリープ状態であるときのプログラムについて

#6

投稿記事 by beatle » 10年前

決まった時間に(定期的にでも一回限りでも)パソコンをスリープから起こし、何かタスクを実行するにはWindows標準の「タスクスケジューラ」が使えます。
タスクスケジューラは「コントロールパネル」の「管理ツール」に入っているはずです。

タスクスケジューラで新しいタスクを作成し、「条件」タブで「タスクを実行するためにスリープを解除する」をチェックすると、パソコンがスリープしていても起きてからタスクが実行されます。

以上は手動での操作ですが、タスクの作成をプログラムからやる方法は僕は知りませんので他の方に譲ります。


閉鎖

“C言語何でも質問掲示板” へ戻る