ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2017年11月23日(木) 10:37

All times are UTC+09:00




新しいトピックを投稿する  トピックへ返信する  [ 8 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2015年4月03日(金) 06:25 
久々にABを使っているのですが、件名通りGetTickCountの値がおかしいです。
ありえないくらい大きい数字が返ってきます。

おそらく以前はwindows XPで使っていて今はwindows 8.1で使っていることが原因なのかなと思うのですが
よくわからないです。どなたか解決法を知らないでしょうか?

もしOSが原因なら他のAPIも違う値が返ってきたりするのでしょうか?
そもそもABを使い続けているのが悪いのかな。

人がほとんどいないみたいなので返事は返ってこなそうですが気長に待ってます。
自分でも調べているので答えが見つけられればいいのですが、流石にABの情報は全然ないですね・・・。
どこに移転するかも考えないといけないな・・・。


通報する
ページトップ
   
投稿記事Posted: 2015年4月03日(金) 06:27 
久々で基本的な事を書き忘れていました。
ABのバージョンは4.24.00です。


通報する
ページトップ
   
投稿記事Posted: 2015年4月11日(土) 18:38 
以下のようなコードをコンパイルし、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」にしたところ、不具合のうち一部は解決した覚えがあります。


通報する
ページトップ
   
投稿記事Posted: 2015年4月12日(日) 01:01 
オフライン

登録日時: 2006年2月05日(日) 17:10
記事: 189
住所: 東京都
はじめまして。
私は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ですか?

よろしくお願いします。


最後に編集したユーザー たかせ on 2015年5月26日(火) 14:26 [ 編集 3 回目 ]

通報する
ページトップ
投稿記事Posted: 2015年4月12日(日) 05:33 
返信有難うございます。
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の機能を知らなかっただけでした・・・。
すいません。
恥ずかしい。
大変お騒がせしました。
こんなことにかなりの時間を使ってしまいました。

情報が間違っていたり、また新たな情報があれば書き込みたいと思います(恥ずかしいから別の名前で)
ありがとうございました。


通報する
ページトップ
   
投稿記事Posted: 2015年4月12日(日) 09:04 
オフライン

登録日時: 2006年2月05日(日) 17:10
記事: 189
住所: 東京都
ああなるほどWindows 8/8.1の起動とシャットダウンが高速なのはそういったからくりだったんですね。
ということは通常のシャットダウンの場合のみだとまあ実用的(たとえばWindows Updateによる再起動)にはあり得ないのですが約50日経過するとGetTickCountの値がリセットされることですね?。


最後に編集したユーザー たかせ on 2015年5月25日(月) 09:31 [ 編集 3 回目 ]

通報する
ページトップ
 記事の件名:
投稿記事Posted: 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,"メッセージ"


通報する
ページトップ
   
投稿記事Posted: 2015年4月13日(月) 22:21 
連続ですみません。

さっきの補足です。

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
は動くということです。


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 8 件の記事 ] 

All times are UTC+09:00


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[1人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by KONISHI Yohsuke