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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0908
roppyakukeeツールのテストをお願いします10解決


roppyakukee

リンク

2013/9/8(Sun) 02:16:13|NO.56991

僕のパソコンのスペックが低いからか分かりませんが、
連打ツールでawait 1にしてもFPS4~500程度にしかならないんです。
FPS取得のみのプログラムを実行してみるとFPS1000ピッタリなるんで
処理落ち・・・というのがFPS500の正体なんでしょうか。

マイパソコン
windows 7 64bit
4GBメモリ
pentium p6200(2.13GHz

このパソコンが低スペなのか中スペなのか分かりませんが、
高性能なやつでFPS1000をたたき出せれば問題なし。
FPS500詰まりなら何かある。ということでよろしくお願いします。
(FPSはパソコンの時計の秒針を使って測ってます。)


http://www.geocities.jp/kamui_stst/
>mousecursormove+
連打モード作動時は目標FPSが1000に、
それ以外の時はwait 1なのでFPS64くらいでしょうか。

パソコン無知無智な僕がこんな堂々と
「テストユーザーもry」なんて言っていいのか凄く心配なんですね。(汗)



この記事に返信する


roppyakukee

リンク

2013/9/8(Sun) 02:18:44|NO.56992

あー、連打テストにはここをよく使わせてもらっているんで
参考程度に・・・
http://momo-blog-parts.com/category6/entry16.html



暇人

リンク

2013/9/8(Sun) 14:43:22|NO.57001

await 1は平均2msぐらい待つ(意図された動作かは知らない、スペック関係なく環境依存かもしれない)

await 1の時に他の処理が1msぐらいだとウェイト無しになりFPS1000ぐらいになる(CPUコア一つ使い切るが)

処理が間に合えば秒間1000フレームにする事は出来るが(時間を計り待ったり待たなかったりして調整)
await待機を使って毎フレーム1ms間隔のFPS1000は無理

msより精度の高いタイマーを使ってawait 1の待機時間を計ってみる

#module #uselib "kernel32.dll" #func QueryPerformanceFrequency "QueryPerformanceFrequency" sptr #func QueryPerformanceCounter "QueryPerformanceCounter" sptr //モジュール初期化 #deffunc QueryPerformance_init dim qpf,2 dim qpc,2 ddim qpt,1 QueryPerformanceFrequency varptr(qpf) if stat=0 {return -1} pf2=((4294967296.0+qpf)\4294967296.0)//符号付きintを正の数のdoubleにする pf2=(pf2+4294967296.0*qpf(1))//64ビットintをdoubleにする QueryPerformanceCounter varptr(qpc) if stat=0 {return -1} stqpc=((4294967296.0+qpc)\4294967296.0) stqpc=(stqpc+4294967296.0*qpc(1)) return 0 //---------QueryPerformance_init実行からの時間を単位を指定して取得-------- //GetQPtime(p1) // p1 = 何分の1秒かを指定(省略時1000)[ミリ秒なら1000] //整数部が指定単位になる #define global ctype GetQPtime(%1=1000) _GetQPtime(%1) #defcfunc _GetQPtime int q QueryPerformanceCounter varptr(qpc) qpt=((4294967296.0+qpc)\4294967296.0) return ((qpt+4294967296.0*qpc(1))-stqpc)/pf2*q #global QueryPerformance_init if stat<0 {dialog "高分解能パフォーマンスカウンタが使用できません":end} repeat //適当に処理時間を作る repeat 10000 //この処理が1ms以内ならawait 1の待ち時間が2msから引かれる 1msを超えると1msも待機しなくなる loop tima=GetQPtime(1000) await 1 timb=(GetQPtime(1000)-tima)//awaitの待機時間を正確に取得 color 255,255,255 px=((cnt/25)\6)*100 py=(cnt\25)*16 boxf px,py,px+100,py+16 color pos px,py mes timb loop stop



roppyakukee

リンク

2013/9/9(Mon) 01:54:07|NO.57029

試しに埋め込んでみたところ、
連打無し状態のawaitでも0.1ミリ秒くらいしかありませんでした。
これは処理を軽くするしかないですね。

あと今発見したよく分からないバグなんですが、
HSP3.4bからテスト実行で起動したMCM+がいるときのみ
キーボードの「w」が確定された状態で出てきて
「を」「わ」と入力しようとすると「wお」「wあ」となる。
たぶんwinAPI引っ張ってるから何かで誤動作起こしてるんだと
思いますが・・・



タイマーありがとうございます!
これからいろいろなところで使わせてもらうかもです。



roppyakukee

リンク

2013/9/9(Mon) 01:57:13|NO.57030

(連投ごめんなさい)
100ミリ秒連打設定で、7秒間連打ゲームを実行すると
15回ぐらい。
100=0.1秒で6~70回は行ってほしかった。

みなさんのパソコンだとどうなるんだろうか



暇人

リンク

2013/9/9(Mon) 22:16:29|NO.57053

100ミリ秒に設定して60回だった



roppyakukee

リンク

2013/9/9(Mon) 23:08:51|NO.57054

???暇人さんどうやったらそうなるんですかwww
スペック晒してもらえませんか?

あと、MCM+ ver 1.01を公開しました。
僕のところのスペックでもFPS900程を記録できるようになりました。
http://www.geocities.jp/kamui_stst/

windows 7 64bit
pentium p6200
4GBメモリ
因みにプロセス数90個越え



hamyuu

リンク

2013/9/9(Mon) 23:30:15|NO.57055

100ミリで

v1.00だと7秒間で46回。
平均660fpsくらいでした。

v1.01だと7秒間で72回
fpsは1000でした。

(Core i7 3630QM)



kanahiron

リンク

2013/9/9(Mon) 23:39:21|NO.57056

core i7 3770kです(8core 4.3GHz)

Ver 1.0.1です
100msで970〜994fps、7秒の連打テストで69回でした



暇人

リンク

2013/9/10(Tue) 02:03:35|NO.57057

1.01だと
100ms設定で40回弱
FPS500ぐらい
前のバージョンだとFPS750ぐらいだから
ウェイトかからないフレームが5割ぐらいあったんだろう

XPのDualCore3.2GHz


ブラウザ側のアプリが処理落ちしなければ100ms指定すれば70回
10msなら700回になるサンプル(CPUがシングルコアだとブラウザが処理落ちしたらHSP側も処理落ちするだろうけど)
ALT押してる間だけ左クリック連打になる

#include "user32.as" #module #uselib "winmm.dll" #cfunc _timeGetTime "timeGetTime" #func _timeGetDevCaps "timeGetDevCaps" var,int #func _timeBeginPeriod "timeBeginPeriod" sptr #func _timeEndPeriod "timeEndPeriod" sptr #defcfunc timeGetTime return _timeGetTime() #deffunc timeEndPeriod onexit //タイマー精度を戻す(終了時に自動で呼びだされる) if tbp {_timeEndPeriod tbp :tbp=0} return //SetFps fps // fps = 設定するフレームレート #deffunc SetFps double fps if tbp=0{ //タイマー精度変更 dim timcap,2 _timeGetDevCaps timcap,8 //タイマー精度の性能を取得 tbp=timcap //最小設定を代入 _timeBeginPeriod tbp //タイマー精度設定 } f_tim=1000.0/fps //1フレームの時間 ms_tim=_timeGetTime() //スタート時間(d3timer()-ms_timでスタートからの時間にする) fs_tim=0.0 //フレームスタート時間 return f_tim //GetFps fps // fps = フレームレート取得 //statにGetFps間の時間が返る #deffunc GetFps var fps to=t fps_cnt+ fs_tim+f_tim //1フレームの時間を足して次フレームスタート時間にする sms=fs_tim-(_timeGetTime()-ms_tim) //次フレームスタート時間からスタートからの時間を引いてスリープ時間にする(結果が負数なら1フレームの時間を越えた) if sms < 0 {fs_tim-sms} //1フレームの時間以上使用したからオーバー分をフレームスタート時間に加算 await limit(sms,0,f_tim+1) //小数点以下のスリープは出来ないから最大スリープ時間をf_tim+1にする t=_timeGetTime()/1000 if t ! to {fps=fps_cnt:fps_cnt=0} return int(f_tim-sms) #global buffer 1,150,40 screen 0,150,100,0,200,200 gsel 0,2 cls 1 pos 10,10 set_ms=100 input set_ms,50 pos 65,10 mes "ms" SetFps 1000 repeat if set_ms ! set_ms_bak {//連打タイミングの変更があった set_ms_bak=limit(set_ms,1,1000)//1〜1000に限定 if set_ms_bak ! set_ms {//指定された数値が範囲外だったのでinputの方も修正された値を設定 objprm objid,set_ms_bak } tms=timeGetTime()-set_ms } getkey alt,18 repeat //経過時間分連打 if (timeGetTime()-tms)>=set_ms { tms+set_ms if alt { mouse_event $2,0,0,0,0 mouse_event $4,0,0,0,0 } }else{ break } loop GetFps fps gsel 1 color boxf 0,0,150,40 color 255 pos 20,10 mes strf("fps=%d ALT=%d",fps,alt) gsel 0 gmode 3,150,40,100 pos 0,50 gcopy 1 loop stop
経過時間分連打するのでSetFps 60にしても秒間の連打は変らない
1フレームで複数回連打する事になる



暇人

リンク

2013/9/10(Tue) 20:20:06|NO.57069

redraw 1の処理時間嫌って半透明コピー使ったけど
半透明コピーのが重かった・・・

FPS固定モジュールはNO.57057のを使用

screen 0,150,100,8,200,200 cls 1 pos 10,30 set_ms=100 input set_ms,50 pos 65,30 mes "ms" objsize 75,20 pos 0,0 button gosub "連打モードON",*on_label pos 75,0 button gosub "連打モードOFF",*off_label gsel 0,2 *start SetFps 1000 title "連打モードON" tms=timeGetTime()-set_ms repeat if set_ms ! set_ms_bak {//連打タイミングの変更があった set_ms_bak=limit(set_ms,1,1000)//1〜1000に限定 if set_ms_bak ! set_ms {//指定された数値が範囲外だったのでinputの方も修正された値を設定 objprm objid,set_ms_bak } tms=timeGetTime()-set_ms } getkey alt,18 repeat //経過時間分連打 if (timeGetTime()-tms)>=set_ms { tms+set_ms if alt { mouse_event $2,0,0,0,0 mouse_event $4,0,0,0,0 } }else{ break } loop GetFps fps if off=1 {break} gosub *draw loop SetFps 60 title "連打モードOFF" repeat getkey alt,18 gosub *draw GetFps fps if off=0 {break} loop goto *start stop *draw redraw 0 color boxf 0,60,150,100 color 255 pos 20,70 mes strf("fps=%d ALT=%d",fps,alt) redraw 1,0,60,150,40 return *on_label off=0 return *off_label off=1 return



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