ab.com コミュニティ https://www.activebasic.com/forum/ |
|
GetTickCountの値がおかしい https://www.activebasic.com/forum/viewtopic.php?t=4573 |
ページ 1 / 1 |
作成者: | 竹中三郎 [ 2015年4月03日(金) 06:25 ] |
記事の件名: | GetTickCountの値がおかしい |
久々にABを使っているのですが、件名通りGetTickCountの値がおかしいです。 ありえないくらい大きい数字が返ってきます。 おそらく以前はwindows XPで使っていて今はwindows 8.1で使っていることが原因なのかなと思うのですが よくわからないです。どなたか解決法を知らないでしょうか? もしOSが原因なら他のAPIも違う値が返ってきたりするのでしょうか? そもそもABを使い続けているのが悪いのかな。 人がほとんどいないみたいなので返事は返ってこなそうですが気長に待ってます。 自分でも調べているので答えが見つけられればいいのですが、流石にABの情報は全然ないですね・・・。 どこに移転するかも考えないといけないな・・・。 |
作成者: | 竹中三郎 [ 2015年4月03日(金) 06:27 ] |
記事の件名: | Re: GetTickCountの値がおかしい |
久々で基本的な事を書き忘れていました。 ABのバージョンは4.24.00です。 |
作成者: | ゲスト [ 2015年4月11日(土) 18:38 ] |
記事の件名: | Re: GetTickCountの値がおかしい |
以下のようなコードをコンパイルし、PC再起動後に実行してみました。 コード: #N88BASIC print GetTickCount()結果は1回目23000代、2回目30000代と、まあ妥当?な値でした。 OSはWindows8.1ですが、どうも同じ現象は起こらないようです。 最近PCのプログラミング自体やらなくなってしまいまして、お役に立てずすみません。 ただ、私も気になることが一つ。 かなり前にPCをXP(32bit)から8.1(64bit)に買い替えたついでに久しぶりにABを触ってみました。 そのとき、reallocで0が返る、リソースのbmpがLoadBitmapで読み込めないなどしてました。 結局、その後すぐに開発をやめ、コードを削除してしまったので原因は分からず仕舞いです。 確か、ツールバー下のドロップダウンを「Win32」から「Win64」にしたところ、不具合のうち一部は解決した覚えがあります。 |
作成者: | たかせ [ 2015年4月12日(日) 01:01 ] |
記事の件名: | 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ですか? よろしくお願いします。 |
作成者: | 竹中三郎 [ 2015年4月12日(日) 05:33 ] |
記事の件名: | Re: GetTickCountの値がおかしい |
返信有難うございます。 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今、計測するとd=508039171 a=141時間以上使用していることになってしまいます 起動して10分ぐらいしかたってないのに。 再起動してすぐ試してみると2分とかまともな値が。まともな値は初めて出ました。 以前は150時間、128時間、6時間とか出ていました。 スリープとか休止状態だと時間はリセットされないので、当然経過時間は増えていくのですが 毎回シャットダウンで電源を切っています。 と、ここまで書いてふと疑問が。 シャットダウンにも色々あるのでは・・・? 検索してみるとこんな記事が! http://imagingsolution.net/program/wind ... shut-down/ 完全シャットダウンなんて聞いてないよ・・・ 早速試してみると、通常のシャットダウンだと経過時間はリセットされずにそのまま足されていき、 完全シャットダウンでは時間がリセットされまともな値になりました。 通常シャットダウンはシステム的にはスリープ状態という認識なんですね。 再起動は完全シャットダウンしてから起動していると。 これで確定のようです。 私が8.1の機能を知らなかっただけでした・・・。 すいません。 恥ずかしい。 大変お騒がせしました。 こんなことにかなりの時間を使ってしまいました。 情報が間違っていたり、また新たな情報があれば書き込みたいと思います(恥ずかしいから別の名前で) ありがとうございました。 |
作成者: | たかせ [ 2015年4月12日(日) 09:04 ] |
記事の件名: | Re: GetTickCoutの値がおかしい |
ああなるほどWindows 8/8.1の起動とシャットダウンが高速なのはそういったからくりだったんですね。 ということは通常のシャットダウンの場合のみだとまあ実用的(たとえばWindows Updateによる再起動)にはあり得ないのですが約50日経過するとGetTickCountの値がリセットされることですね?。 |
作成者: | ゲスト [ 2015年4月13日(月) 22:04 ] |
記事の件名: | |
先日投稿した「ゲスト」です。 ABのバージョンは4.24です。失礼しました。 BmpがLoadBitmapで読み込めない問題は再現できませんでしたが、reallocで0(NULL)が返るのは原因が分かりました。 私がMicrosoftの説明の、「reallocの第一引数memblockがNULLの時はmallocと同じ動作をする」という部分を読んで、ABも同じ仕様だと思い込んでいたことでした。 他に思い出したこととして、エディタ上部のドロップダウンを「Win64」にしてコンパイルすると、命令語MsgBoxがコンパイルエラーを起こします。 エラーの文言は「"0" 無効な識別子です」です。 コード: #N88BASIC MsgBox _PromptSys_hWnd,"メッセージ" |
作成者: | ゲスト [ 2015年4月13日(月) 22:21 ] |
記事の件名: | Re: GetTickCountの値がおかしい |
連続ですみません。 さっきの補足です。 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は動くということです。 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |