久々にABを使っているのですが、件名通りGetTickCountの値がおかしいです。
ありえないくらい大きい数字が返ってきます。
おそらく以前はwindows XPで使っていて今はwindows 8.1で使っていることが原因なのかなと思うのですが
よくわからないです。どなたか解決法を知らないでしょうか?
もしOSが原因なら他のAPIも違う値が返ってきたりするのでしょうか?
そもそもABを使い続けているのが悪いのかな。
人がほとんどいないみたいなので返事は返ってこなそうですが気長に待ってます。
自分でも調べているので答えが見つけられればいいのですが、流石にABの情報は全然ないですね・・・。
どこに移転するかも考えないといけないな・・・。
GetTickCountの値がおかしい
Re: GetTickCountの値がおかしい
以下のようなコードをコンパイルし、PC再起動後に実行してみました。
結果は1回目23000代、2回目30000代と、まあ妥当?な値でした。
OSはWindows8.1ですが、どうも同じ現象は起こらないようです。
最近PCのプログラミング自体やらなくなってしまいまして、お役に立てずすみません。
ただ、私も気になることが一つ。
かなり前にPCをXP(32bit)から8.1(64bit)に買い替えたついでに久しぶりにABを触ってみました。
そのとき、reallocで0が返る、リソースのbmpがLoadBitmapで読み込めないなどしてました。
結局、その後すぐに開発をやめ、コードを削除してしまったので原因は分からず仕舞いです。
確か、ツールバー下のドロップダウンを「Win32」から「Win64」にしたところ、不具合のうち一部は解決した覚えがあります。
コード: 全て選択
#N88BASIC
print GetTickCount()
OSはWindows8.1ですが、どうも同じ現象は起こらないようです。
最近PCのプログラミング自体やらなくなってしまいまして、お役に立てずすみません。
ただ、私も気になることが一つ。
かなり前にPCをXP(32bit)から8.1(64bit)に買い替えたついでに久しぶりにABを触ってみました。
そのとき、reallocで0が返る、リソースのbmpがLoadBitmapで読み込めないなどしてました。
結局、その後すぐに開発をやめ、コードを削除してしまったので原因は分からず仕舞いです。
確か、ツールバー下のドロップダウンを「Win32」から「Win64」にしたところ、不具合のうち一部は解決した覚えがあります。
Re: GetTickCountの値がおかしい
はじめまして。
私はWindows 8.1をもっていないので確認できません。
TO 竹中三郎様
Windows XpとWindows 7(いずれも32Bit)で以下のプログラムを両PCで同時に電源オンさせて通常のデスクトップ画面表示後に動かしてみました。
DIM TEXT[47] AS Char
DIM COUNT AS DWord
COUNT = GetTickCount()
wsprintf(TEXT,"TickCount=%10d",COUNT)
MessageBox(NULL,TEXT,"TEST32",MB_OK)
END
2回実行した結果GetTickCountの値が以下のようになりました。
1回目 113593 108997(左側Win-Xp 右側Win-7)
2回目 171125 166499( 同上 )
どうしてもタイミング的に多少誤差がありますがWin-XpとWin-7との極端な相違はありませんでした。
そこでありえない値の具体的の数値はいくつでしたか?
余談ですがPCを3時間立ち上げた状態だとGetTickCountの値10800000となります。
TO ゲスト様
>かなり前にPCをXP(32bit)から8.1(64bit)に買い替えたついでに久しぶりにABを触ってみました。
>そのとき、reallocで0が返る、リソースのbmpがLoadBitmapで読み込めないなどしてました。
使用したABのバージョンは4.24ですか?
よろしくお願いします。
私はWindows 8.1をもっていないので確認できません。
TO 竹中三郎様
Windows XpとWindows 7(いずれも32Bit)で以下のプログラムを両PCで同時に電源オンさせて通常のデスクトップ画面表示後に動かしてみました。
DIM TEXT[47] AS Char
DIM COUNT AS DWord
COUNT = GetTickCount()
wsprintf(TEXT,"TickCount=%10d",COUNT)
MessageBox(NULL,TEXT,"TEST32",MB_OK)
END
2回実行した結果GetTickCountの値が以下のようになりました。
1回目 113593 108997(左側Win-Xp 右側Win-7)
2回目 171125 166499( 同上 )
どうしてもタイミング的に多少誤差がありますがWin-XpとWin-7との極端な相違はありませんでした。
そこでありえない値の具体的の数値はいくつでしたか?
余談ですがPCを3時間立ち上げた状態だとGetTickCountの値10800000となります。
TO ゲスト様
>かなり前にPCをXP(32bit)から8.1(64bit)に買い替えたついでに久しぶりにABを触ってみました。
>そのとき、reallocで0が返る、リソースのbmpがLoadBitmapで読み込めないなどしてました。
使用したABのバージョンは4.24ですか?
よろしくお願いします。
最後に編集したユーザー たかせ [ 2015年5月26日(火) 14:26 ], 累計 3 回
Re: GetTickCountの値がおかしい
返信有難うございます。
ABユーザーがまだ残っていてうれしいです。
前回の書き込み時もそうですが、こんな感じのコードで試しています。
a,b,cにパソコンを起動してからの時間、分、秒が入ります。
たかせさんの言う通り10800000だと3時間。
ちなみにtimeGetTimeでも同じ値が返ってきます。
win32をwin64に変えてコンパイルしても同じ値です。
今、計測するとd=508039171
a=141時間以上使用していることになってしまいます
起動して10分ぐらいしかたってないのに。
再起動してすぐ試してみると2分とかまともな値が。まともな値は初めて出ました。
以前は150時間、128時間、6時間とか出ていました。
スリープとか休止状態だと時間はリセットされないので、当然経過時間は増えていくのですが
毎回シャットダウンで電源を切っています。
と、ここまで書いてふと疑問が。
シャットダウンにも色々あるのでは・・・?
検索してみるとこんな記事が!
http://imagingsolution.net/program/wind ... shut-down/
完全シャットダウンなんて聞いてないよ・・・
早速試してみると、通常のシャットダウンだと経過時間はリセットされずにそのまま足されていき、
完全シャットダウンでは時間がリセットされまともな値になりました。
通常シャットダウンはシステム的にはスリープ状態という認識なんですね。
再起動は完全シャットダウンしてから起動していると。
これで確定のようです。
私が8.1の機能を知らなかっただけでした・・・。
すいません。
恥ずかしい。
大変お騒がせしました。
こんなことにかなりの時間を使ってしまいました。
情報が間違っていたり、また新たな情報があれば書き込みたいと思います(恥ずかしいから別の名前で)
ありがとうございました。
ABユーザーがまだ残っていてうれしいです。
前回の書き込み時もそうですが、こんな感じのコードで試しています。
a,b,cにパソコンを起動してからの時間、分、秒が入ります。
たかせさんの言う通り10800000だと3時間。
ちなみにtimeGetTimeでも同じ値が返ってきます。
win32をwin64に変えてコンパイルしても同じ値です。
コード: 全て選択
Dim a As Long, b As Long, c As Long, d As Long, e As Long
d = GetTickCount()
e = d \ 1000
a=e \ 3600
b=e \ 60 mod 60
c=e mod 60
debug
a=141時間以上使用していることになってしまいます
起動して10分ぐらいしかたってないのに。
再起動してすぐ試してみると2分とかまともな値が。まともな値は初めて出ました。
以前は150時間、128時間、6時間とか出ていました。
スリープとか休止状態だと時間はリセットされないので、当然経過時間は増えていくのですが
毎回シャットダウンで電源を切っています。
と、ここまで書いてふと疑問が。
シャットダウンにも色々あるのでは・・・?
検索してみるとこんな記事が!
http://imagingsolution.net/program/wind ... shut-down/
完全シャットダウンなんて聞いてないよ・・・
早速試してみると、通常のシャットダウンだと経過時間はリセットされずにそのまま足されていき、
完全シャットダウンでは時間がリセットされまともな値になりました。
通常シャットダウンはシステム的にはスリープ状態という認識なんですね。
再起動は完全シャットダウンしてから起動していると。
これで確定のようです。
私が8.1の機能を知らなかっただけでした・・・。
すいません。
恥ずかしい。
大変お騒がせしました。
こんなことにかなりの時間を使ってしまいました。
情報が間違っていたり、また新たな情報があれば書き込みたいと思います(恥ずかしいから別の名前で)
ありがとうございました。
Re: GetTickCoutの値がおかしい
ああなるほどWindows 8/8.1の起動とシャットダウンが高速なのはそういったからくりだったんですね。
ということは通常のシャットダウンの場合のみだとまあ実用的(たとえばWindows Updateによる再起動)にはあり得ないのですが約50日経過するとGetTickCountの値がリセットされることですね?。
ということは通常のシャットダウンの場合のみだとまあ実用的(たとえばWindows Updateによる再起動)にはあり得ないのですが約50日経過するとGetTickCountの値がリセットされることですね?。
最後に編集したユーザー たかせ [ 2015年5月25日(月) 09:31 ], 累計 3 回
先日投稿した「ゲスト」です。
ABのバージョンは4.24です。失礼しました。
BmpがLoadBitmapで読み込めない問題は再現できませんでしたが、reallocで0(NULL)が返るのは原因が分かりました。
私がMicrosoftの説明の、「reallocの第一引数memblockがNULLの時はmallocと同じ動作をする」という部分を読んで、ABも同じ仕様だと思い込んでいたことでした。
他に思い出したこととして、エディタ上部のドロップダウンを「Win64」にしてコンパイルすると、命令語MsgBoxがコンパイルエラーを起こします。
エラーの文言は「"0" 無効な識別子です」です。
ABのバージョンは4.24です。失礼しました。
BmpがLoadBitmapで読み込めない問題は再現できませんでしたが、reallocで0(NULL)が返るのは原因が分かりました。
私がMicrosoftの説明の、「reallocの第一引数memblockがNULLの時はmallocと同じ動作をする」という部分を読んで、ABも同じ仕様だと思い込んでいたことでした。
他に思い出したこととして、エディタ上部のドロップダウンを「Win64」にしてコンパイルすると、命令語MsgBoxがコンパイルエラーを起こします。
エラーの文言は「"0" 無効な識別子です」です。
コード: 全て選択
#N88BASIC
MsgBox _PromptSys_hWnd,"メッセージ"
Re: GetTickCountの値がおかしい
連続ですみません。
さっきの補足です。
reallocの問題は第一引数に、あらかじめmallocで取得したアドレスを入れれば解決しました。
たとえば、abc順に10の文字を表示するプログラムは
は動かないけれど
は動くということです。
さっきの補足です。
reallocの問題は第一引数に、あらかじめmallocで取得したアドレスを入れれば解決しました。
たとえば、abc順に10の文字を表示するプログラムは
コード: 全て選択
#N88BASIC
Dim buf As BytePtr,i As Long
Dim src As BytePtr
src=calloc(2)
lstrcpy(src,"a")
'↓ここからメイン
For i=0 To 10
buf=realloc(buf,2)
lstrcpy(buf,src)
print MakeStr(buf)
src[0]++
Sleep(500)
Next
End
コード: 全て選択
#N88BASIC
Dim buf As BytePtr,i As Long
Dim src As BytePtr
src=calloc(2)
lstrcpy(src,"a")
'↓ここからメイン
buf=calloc(2)'ここ重要
For i=0 To 10
buf=realloc(buf,2)
lstrcpy(buf,src)
print MakeStr(buf)
src[0]++
Sleep(500)
Next
End