ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2017年9月20日(水) 18:16

All times are UTC+09:00




新しいトピックを投稿する  トピックへ返信する  [ 2 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2009年7月20日(月) 21:45 
ActiveBasic Version.4.24.00 を使用しています。
プログラム作成時およびプログラム実行時に気になる箇所がありますのでお知らせします。
(使用環境)
Windows XP Version 2002 Service Pack 3
Celeron 1.21GB RAM

[プログラム作成時]
1. システムメニューのないウィンドウの「テスト」表示を行うと消すことができません。

2. ウィンドウ数が13個以上になると編集画面が正しく表示されなくなります。

[プログラム実行時]
1. 平方根(Sqr)計算でまれに無限ループに入ることがあります。
(平方根関数の収束条件に問題があるのではないでしょうか。)

2. 呼び出しのない(使用されない)プロシージャを含むプログラムをコンパイルすると
呼び出しのないプロシージャの構文チェックが行われていないようです。
呼び出しのないプロシージャ内にバグがあってもコンパイルできますが、
プログラムを実行すると、動作が不安定になることがあります。
(計算結果が不正、異常終了が発生する等)
呼び出しのないプロシージャの構文チェックが正しく行われるようにならないでしょうか。

3. 実行時エラーが発生するとWindowsシステムにより強制終了されます。
まれにWindowsそのものが終了することがあります。
AB5は例外処理が可能になるようですが、AB5の完成が遅れているようなので、
AB4に例外処理を取り入れていただけないでしょうか。
(エラー表示があれば原因が特定しやすい。安定したプログラムが開発できる。)

4.文字列を多用するプログラムは、実行速度が遅くなります。
下記のように[\Include\system]内の"_System_HeapStringFree"関数を変更すると速くなります。
変更に問題がないか検討をお願いします(変更行は1行のみ)。

Sub _System_HeapStringFree(BufPtr As VoidPtr)
Dim i As Long
Dim pPtr As DWord

EnterCriticalSection(_System_CriticalSection)
' For i=0 To _System_AllocatedStringInfo.num-1 (元のコード)
For i=_System_AllocatedStringInfo.num-1 To 0 Step -1' (変更コード)
pPtr=GetDWord(_System_AllocatedStringInfo.pAddress+i*4)
If pPtr=BufPtr Then
HeapFree(_System_hProcessHeap,0,BufPtr-4)

_System_AllocatedStringInfo.num=_System_AllocatedStringInfo.num-1
For i=i To _System_AllocatedStringInfo.num-1
SetDWord(_System_AllocatedStringInfo.pAddress+i*SizeOf(DWord),GetDWord(_System_AllocatedStringInfo.pAddress+(i+1)*SizeOf(DWord)))
Next

LeaveCriticalSection(_System_CriticalSection)
Exit Sub
End If
Next
LeaveCriticalSection(_System_CriticalSection)

If BufPtr Then
OutputDebugString(Ex"未知の文字列が解放されようとしました。\r\n")
End If
End Sub


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2009年7月25日(土) 13:14 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
住所: 埼玉県東松山市
引用:
1. システムメニューのないウィンドウの「テスト」表示を行うと消すことができません。
2. ウィンドウ数が13個以上になると編集画面が正しく表示されなくなります。
こちらの環境でも2番は確認できました。10個より多くしたあたりから動作が遅くなってきます。
AB4.23/WinXPSP3/CPU:PenD3.0/Mem:2GB
1番はAlt+F4で消してあげてください。
引用:
1. 平方根(Sqr)計算でまれに無限ループに入ることがあります。
無限ループに入る値を例示してもらえれば助かるのですが、
確かにこのコード(Include/basic/function.sbp内)では無限ループに陥る可能性があります。
安易な解決例としては(指数部と符号を含めた)上位32bitの差を取り、その差の絶対値が1以下になったらあと2回ループを回す等。
#ニュートン法を使ってるので19bit程度の精度で求めればあと2回の計算で76bit程度の精度は出る筈。(必要なのは52bit)
引用:
2. 呼び出しのない(使用されない)プロシージャを含むプログラムをコンパイルすると
呼び出しのないプロシージャの構文チェックが行われていないようです。
呼び出しのないプロシージャ内にバグがあってもコンパイルできますが、
プログラムを実行すると、動作が不安定になることがあります。
AB5では全ての関数の構文チェックをするように設定できるようになっています。
動作が不安定になるというのは初耳。
引用:
3. 実行時エラーが発生するとWindowsシステムにより強制終了されます。
まれにWindowsそのものが終了することがあります。
スタックオーバーフロー、メモリアクセス違反等でプログラムが強制終了させられるのはよく知られた事実だと思いますが、
それで落ちるのはプログラマ側のミスだと思うのですが・・・・・・
引用:
4.文字列を多用するプログラムは、実行速度が遅くなります。
当たり前です。文字列を多用して、且つ実行速度を上げたいならまずはString型から抜け出してmalloc等を利用してみましょう。
コードの変更例にはぱっと見た所問題が無さそうですね。

#何というかこれって仕様提案と言うよりはバグ報告のような

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


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

All times are UTC+09:00


オンラインデータ

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


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

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