HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0927
るっちぃawaitによるCPUの負荷について10解決


るっちぃ

リンク

2013/9/27(Fri) 06:26:38|NO.57356

お世話になっております、るっちぃと申します。

現在、マウスの座標がデスクトップ全体の左上画面端にくると何かしらアクションがされるというプログラムを作っております。

プログラムは下記に示します。
レスポンスを重視するため、await を10に設定してループ監視しておりますが、どうもCPUへの負荷がきになります。

そのため、他の方法を模索しておりますが、なかなかいいものが見つかりません。
CPUに負担があまりかからないという条件で、上記のようなプログラムを書くことはできないのでしょうか?

//-------------

screen 0,100,50

repeat
if(ginfo_mx<=0 and ginfo_my<=0) : dialog : end
await 10
loop

//-------------

よろしくお願いします。
以下試行錯誤
wm_mousemoveを使用・・するがアプリウィンドウ上でしか反応せず・・・。
ならばbgscrの1pxウィンドウを使う・・としてもスマートな方法ではない・・。



この記事に返信する


BNLLEA

リンク

2013/9/27(Fri) 10:10:57|NO.57357

awaitはwaitより精密でCPUに負荷がかかるのでwaitを使ってみましょう
最近のPCであれば違いはほとんど気になりません

後はそのスクリプトが1番効率がいいと思います



check

リンク

2013/9/27(Fri) 15:49:52|NO.57362

wait : CPUへの負担は軽いが精度は悪い
await : CPUへの負担はwaitと比べると重いが、精度はいい
    また、FPSを一定に保ってくれる。

この2つを使い分けよう。



暇人

リンク

2013/9/27(Fri) 20:25:12|NO.57375

>どうもCPUへの負荷がきになります。
実際にhsp3.exeのCPU使用率見てみれば何も問題ない事が分かる
自分の環境じゃ座標判定50個にしてawait 1でもCPU使用率が小数点以下まで見れるやつで0.0%

NO.57356の1ループ処理時間なんてawaitの待ち時間除けば100万分の1秒とかの世界



るっちぃ

リンク

2013/9/27(Fri) 22:02:43|NO.57377

皆様、お返事ありがとうございました!
皆様のご意見のおかげで、解決致しました。

>>BNLLEA様、check様

やはりwaitが有効なのですね。これから使い分けて行きたいと思います!
ありがとうございました!

>>暇人様

なるほど、確かにこのプログラムだけだと0%ですね。
私の場合、ループの中にごちゃごちゃといろいろなものを付け加えるからCPU使用率が高くなってしまうのですね・・・。

なので以下のようにしました。

screen 0,100,50

repeat
if(ginfo_mx<=0 and ginfo_my<=0) : //以降マウス判定処理を記述
if(cnt\50==0) : //以降0.5秒毎に定期的に更新したいコンテンツを記述
wait 1
loop

私の場合、定期的に更新したいコンテンツもwait 1に含まれていたので重かったのだと思います。

ご回答、ありがとうございました!!



るっちぃ

リンク

2013/9/27(Fri) 22:12:22|NO.57380

追記

Corei5 3470を使用しておりますが、
暇人様に申しました処理をしましたところ、

CPU使用率が7%-8%->1%-2%に下がりました!!

複数のアプリケーションを使っていますので、この6%が私にとって大変大きなものです!
本当にありがとうございました!



暇人

リンク

2013/9/27(Fri) 22:38:31|NO.57383

今のバージョンだとwait 1はバグで待ち時間0になる事があるから
常に10msぐらい待ちたいなら

await 0 await 10//waitは精度低いままなのか環境に左右されて自分の所だと1指定でも15ms前後待機してるが・・・
の方が良い



(''

リンク

2013/9/28(Sat) 18:00:36|NO.57425

グローバルフックDLLでマウスメッセージをフックしてみてはどうでしょう?



るっちぃ

リンク

2013/9/29(Sun) 09:25:50|NO.57455

>>暇人様

度重なるアドバイス、ありがとうございます!
こちらで試してみますね!

>>(''様

グ、グローバルフック・・なるものがあるのですね。いやはや、勉強不足で申し訳ございません。
こちらで調べさせてもらいますので、またわからなければよろしくお願いします!!



通りすがり

リンク

2013/10/1(Tue) 00:15:46|NO.57485

リピートを回すよりもタイマーで処理した方が個人的にはすっきり



るっちぃ

リンク

2013/10/5(Sat) 22:18:55|NO.57516

>>通りすがり様

タイマーで割り込みを入れて処理をさせるやつですね!
それも考えました!私も個人的にこの方法はいいと思います♪

ご回答ありがとうございました!



ONION software Copyright 1997-2021(c) All rights reserved.