■記事リスト / ▼下のスレッド
/ ▲上のスレッド
■1445 / 親記事) |
「目からウロコの・・・パート2」を公開しました。
|
□投稿者/ ONnoji -(2024/06/11(Tue) 16:31:26)
| 2024/06/11(Tue) 16:44:53 編集(投稿者)
<お知らせ>
拙作webページで
「目からウロコのデータベース桐プログラミング入門 パート2」を公開しました。
こちら ↓ 桐の釣魚大全のトップ http://silicon7565.html.xdomain.jp/
桐の釣魚大全のトップ > 目からウロコのデータベース桐プログラミング入門 パート2 http://silicon7565.html.xdomain.jp/primer/primer_side_reader_part2.html
ブラウザで表示されない場合には、F5キーを押してリロードしてください。 ・・・・・・・・・・・・・・・・・
◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇
このテキストの内容は、[フォーム+イベント処理]の初級者向けです。
パート2で初級者の前に最初に立ちはだかる難問は、「オブジェクトって何ですか〜?」です。
なお、このテキストは拙作webページの「桐の釣魚大全」の
「桐のイベント処理の入門講座」
新 フォームアプリケーション入門 §1 新 フォームアプリケーション入門 §2
の副読本として執筆したものです。
目次 10 オブジェクトって何ですか〜? 10.1 オブジェクトは、パソコンの画面上の操作対象のこと 10.2 [オブジェクトのリスト]ウィンドウを使いましょう 11 属性ってなんですか〜? 11.1 [オブジェクトの属性]ウィンドウと[オブジェクトのリスト]ウィンドウの違い 11.2 属性の取得と属性の設定 11.2.1 属性の取得 11.2.2 オブジェクトの属性と変数のデータ型 11.2.3 属性の設定 12 メソッドってなんですか〜? 12.1 メソッド呼び出し 12.2 [更新モード設定]メソッドを使うか? コマンドボタンの機能を使うか?、それが問題だ 12.3 [フォーカス設定]メソッドを使うか? タブオーダーの設定を使うか?、それが問題だ 13 エラー対策のあれこれ 13.1 if ( 条件 ) ... else ... end 13.2 エラー処理コマンドはあるけれど 13.3 フォーム以外のオブジェクト名をチェックする
|
|
580×442 => 250×190
 1718091910.jpg/44KB
|
|
▽[全レス32件(ResNo.28-32 表示)]
■1485 / ResNo.28) |
Re[9]: 多重化のメリット 時限式タイマーのメリット
|
□投稿者/ ONnoji -(2024/07/18(Thu) 17:29:11)
| 2024/07/18(Thu) 17:46:12 編集(投稿者)
ジェダイの桐さん
> タイマーイベントの事が少し理解出来ました。 > 任意のプロシージャの中で > オブジェクト操作 @フォーム.タイマー1 = 1 > で タイマーイベントを オン にする。 > ↓ > 任意の時間プログラムを中断する > ↓ > プロシージャ終了後 タイマーイベントが発生 > > タイマーイベント内で やりたい事があれば行い > > オブジェクト操作 @フォーム.タイマー1 = 0 > で タイマーイベントを オフ にする。 > > この認識であっているでしょうか??
タイマーイベント内で、処理をすればOKという単純なものではありませんよ。
と書いて、よく見たら・・・
以下のように
手続き定義開始 フォーム::タイマー1() 変数宣言 自動, 文字列 { &title, &msg } 変数宣言 自動, 整数 { &trace }
&title = "タイマー1()" &trace = 0 トレース出力 &title + "を実行開始しました"
オブジェクト操作 @フォーム.タイマー1 = 0 条件 ( &trace ) トレース出力 " オブジェクト操作 @フォーム.タイマー1 = 0 /* 時限タイマーの [タイマー1] イベントを停止 */"
トレース出力 &title + "を実行終了しました"
手続き定義終了
↑上のように、タイマーイベントでは、何も実行していないではありませんか!
実際には、タイマーイベント内で、何も実行していませんから・・・
全然違うようですね。
> 何故タイマーイベントが理解かもしないかと言えば、 > AAAA と 4桁の 文字列があり > 1桁で表現できるのは > A 〜 Z、0 〜 9 の 36文字 > この条件でカウントアップしたい事がありました。 > こちらは実現出来たのですが、サンプル表に 3000行 あり プログラムを実行していると 応答なし と表示され どうした物かと思案していました。 > > ONnojiさんのHPで、プログレスバーの項目を見ていると タイマーを使えば > 応答なし を回避できるのでは?とヒントを貰い サブフォームの件で作成頂いたサンプルを参考に プログラムを書いてみたら 応答なし が回避出来ました。 > > パソコンに不可がかかる処理を分散させたい時等に タイマーイベント を使用するのだろうなと思いました。 > > プログレスバー をフォームヘッダに作りたいなと思いましたが断念しました。 > その代わり 近しい事で代用しました。 > > 桐って色んな事が出来るので、教えて頂いた知識を使って実現出来た時は本当に嬉しいです!
うーん、
> サブフォームの件で作成頂いたサンプルを参考に プログラムを書いてみたら 応答なし が回避出来ました。
↑これって、タイマーとは全然関係ないと思いますよ。
多重化して、多重化した方の表(.tbx)で作業しているでしょう。
これが、ビジー(応答なし)を回避した原因だと思いますよ。
試しに、
タイマーを操作しているメソッドをコメントアウトしてみてください。
オブジェクト操作 @フォーム.タイマー1 = 1 オブジェクト操作 @フォーム.タイマー値1 = 25
オブジェクト操作 @フォーム.タイマー1 = 0
タイマーは動かなくなりますが、多重化によるパフォーマンスでビジー(応答なし)を回避しているので何も変わらない思いますよ。
ということで、拝見したイベント処理では、無駄にタイマーをセットしリセットしているだけで、何の役にも立っていないと思いますよ。(^^ゞ
p.s.
多くの場合、多重化によるパフォーマンスでビジー(応答なし)を回避できると思いますよ。
多重化してもパフォーマンスが悪い場合に、更にパフォーマンスを上げたい時に、時限タイマーによるプログレスバー方式を使います。
しかし、プログレスバーを使う主な目的は、作業の中断を出来るようにすることですよ。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
|
|
|
■1486 / ResNo.29) |
Re[10]: 「目からウロコの・・・パート2」を公開しました。
|
□投稿者/ ジェダイの桐 -(2024/07/18(Thu) 18:24:47)
| ONnojiさん
こんにちは!
やっぱりタイマーイベントの事を聞いて良かったです! 誤って理解する所でした。
> 多重化して、多重化した方の表(.tbx)で作業しているでしょう。 > これが、ビジー(応答なし)を回避した原因だと思いますよ。
回避要因は多重化だったんですね!
> タイマーを操作しているメソッドをコメントアウトしてみてください。
明日早速試してみます。
今回の件で タイマーイベント は登場しなくて 良さそうと言う事が分かりました^_^
> ということで、拝見したイベント処理では、無駄にタイマーをセットしリセットしているだけで、何の役にも立っていないと思いますよ。(^^ゞ
半信半疑で タイマーイベント と書いてみて 見かけ上上手く行った様に みえたので失敗した事が分かった嬉しいです(^^)
意外にも内容はないけど タイマーセット と リセット までは出来ていたのですね! セットする位置とタイマーイベント内の内容が重要なのでしょうね。
>>サブフォームの件で作成頂いたサンプルを参考に プログラムを書いてみたら 応答なし が回避出来ました。
こちらのサンプルでは、タイマーイベント内で 手続き実行をしていました。 私も最初 タイマーイベント内で 手続き実行を行ったのですが、引数を入れていたのでエラーが起こりました。 これは考えて見ればタイマーイベント内に関係のない引数でしたので当たり前の話です。
タイマーイベント に限らず 手続き内で 別の手続きを呼び出す時は よく考えて使えば 汎用性のある プログラムになるし、他の影響を受けては行けない時に 手続きを呼び出すとエラーになる。
プログラムの考え方って本当に良く出来ていると思います^_^
勉強になりましたm(_ _)m
|
|
|
■1487 / ResNo.30) |
Re[10]: 多重化のメリット 時限式タイマーのメリット
|
□投稿者/ ONnoji -(2024/07/18(Thu) 18:26:21)
| 2024/07/19(Fri) 00:40:54 編集(投稿者)
ジェダイの桐さん
蛇足を少々・・・(^^ゞ
> タイマーイベント内で、処理をすればOKという単純なものではありませんよ。 > 多くの場合、多重化によるパフォーマンスでビジー(応答なし)を回避できると思いますよ。 > > 多重化してもパフォーマンスが悪い場合に、更にパフォーマンスを上げたい時に、時限タイマーによるプログレスバー方式を使います。 > > しかし、プログレスバーを使う主な目的は、作業の中断を出来るようにすることですよ。 > ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
フォームの編集対象表を[イベント処理で多重化した表]は、双子の表ですが、一方がビジブルで、多重化した方はステルスな表ですね。
このように、多重化した表と、[イベント処理で開いたステルスな表]を処理する場合には、
フォームの編集対象を対象にした時と比べると、けた違いにパフォーマンスが良いです。
つまり、フォームに見えている表は、レコードの移動によって再描画(リドロー)が発生しますので、
その再描画(リドロー)がパフォーマンスを悪くさせているということです。
◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇
ステルスな表を扱っていても、ファイルのサイズが大きい場合や、レコード数が極端に多い場合、
処理する内容が極端に複雑な場合、などにはパフォーマンスが悪くなります。
例えば、
A.レコード数が多いけれど、1パスで処理を行う場合 ⇒ 時限タイマー1回につき処理するレコード数を決めます
B.レコード数は多くないが、複数パスで処理を行う場合(結果的に処理レコード数が多くなったのと同じです)⇒時限タイマーから処理する内容ごとに手続きを呼び出します
このような場合に、時限タイマーによるプログレスバーを検討するということですよ。
p.s.
A.の場合には、以下のような感じ。※あくまでもアバウトなフィーリングです。細かいことは気にしないこと ・・・・・・・・・・・・・・・・・・
手続き定義開始 prcプログレスバーを実行( )
&m処理単位レコード数 = 対象レコード数/回数
&mRecordCount = 1 &mProgressBarRun = 1 ブジェクト操作 @フォーム{ タイマー1 = 1, タイマー値1 = 10 }
手続き定義終了
手続き定義開始 フォーム::タイマー1()
if ( &mProgressBarRun )
手続き実行 prcProgressbarCall( ) end
手続き定義終了
手続き定義開始 prcProgressbarCall( )
&count = 0 /* カウンタ */
繰り返し
** プログレスバーで行う処理内容 例えば、一般手続きを実行 prcProcedureName()とか
&count = &count + 1 if ( &count > &m処理単位レコード数 .or #eof .or [Esc] キーを押した )
** プログレスバーの1回あたりの規定回数を実行した、または終端行に到達したので脱出する
繰り返し中止 end 繰り返し終了
if ( [Esc] キーを押した または #eof )
** [Esc] キーを押した、または終端行に到達したのでプログレスバーを終了する
&mProgressBarRun = 0 オブジェクト操作 @フォーム.タイマー1 = 0 /* タイマーをリセットする */ end
手続き定義終了
※なお、[Esc] キーで中断するためには、[キーダウン]イベントをアクティブにして、[Esc] キーを検出する必要があります。
B.の場合には、以下のような感じ。※あくまでもアバウトなフィーリングです。細かいことは気にしないこと ・・・・・・・・・・・・・・・・・・
手続き定義開始 prcタイマーによる分割実行( )
&mPhase = 1 ブジェクト操作 @フォーム{ タイマー1 = 1, タイマー値1 = 10 }
手続き定義終了
手続き定義開始 フォーム::タイマー1()
if ( &mPhase = 1 )
手続き実行 prcPhasePrimaryRun( ) end
if ( &mPhase = 2 )
手続き実行 prcPhaseSecondaryRun( ) end
手続き定義終了
手続き定義開始 prcPhasePrimaryRun( ) &mPhase = &mPhase + 1
** 処理内容
手続き定義終了
手続き定義開始 prcPhaseSecondarRun( ) &mPhase = &mPhase + 1
** 処理内容
&mPhase = 0 オブジェクト操作 @フォーム.タイマー1 = 0 /* タイマーをリセットする */
手続き定義終了
A.
prcプログレスバーを実行 … インターバル … フォーム::タイマー1 └ prcProgressbarCall
B.
prcタイマーによる分割実行 … インターバル … フォーム::タイマー1 ├ prcPhasePrimaryRun └ prcPhaseSecondaryRun
|
|
|
■1488 / ResNo.31) |
Re[11]: 多重化のメリット 時限式タイマーのメリット
|
□投稿者/ ジェダイの桐 -(2024/07/19(Fri) 10:10:10)
| ONnojiさん
おはようございます。
タイマーに関わるプログラムのコメントアウト フォームのオブジェクトの属性からタイマーイベント を オフ
上記を行いcmd資材品番カウントアップClick() を実行しました。
結果、ビジー(応答なし)は出てきませんでした。 結論、あのプログラムにタイマーイベントは必要なく、ビジー(応答なし)回避は 多重化によるものと言う事が理解出来ました!
>>しかし、プログレスバーを使う主な目的は、作業の中断を出来るようにすることですよ。 >> ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
進捗状況が見た目に分かる事は目的の一つで、主目的は作業の中断が出来ると言う事なのでしょうね(^^) 確かにONnojiさんのHPにも、作業の中断が出来ると便利と書いていました。
> A.の場合には、以下のような感じ。※あくまでもアバウトなフィーリングです。細かいことは気にしないこと > ・・・・・・・・・・・・・・・・・・
プログレスバーの道しるべありがとうございます! いつの日か プログレスバーが必要な時 こちらの道しるべを参考にプルグラムを考えます(^^ゞ
解説ありがとうございましたm(__)m
|
|
|
■1489 / ResNo.32) |
Re[11]: 「多重化のメリット 時限式タイマーのメリット
|
□投稿者/ ONnoji -(2024/07/19(Fri) 12:59:10)
| 2024/07/19(Fri) 18:41:07 編集(投稿者)
ジェダイの桐さん
> タイマーに関わるプログラムのコメントアウト > フォームのオブジェクトの属性からタイマーイベント を オフ > 上記を行いcmd資材品番カウントアップClick() を実行しました。 > 結果、ビジー(応答なし)は出てきませんでした。 > 結論、あのプログラムにタイマーイベントは必要なく、ビジー(応答なし)回避は > 多重化によるものと言う事が理解出来ました!
でしょう。やっぱり。
「イベント処理による編集対象表の多重化」は慣れれば簡単に出来るでしょ。
パフォーマンスの向上は凄まじいです。
そして、フォームに見えている編集対象表のレコードが移動しないのでサイレントです。
> >>しかし、プログレスバーを使う主な目的は、作業の中断を出来るようにすることですよ。 > >> ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ > 進捗状況が見た目に分かる事は目的の一つで、主目的は作業の中断が出来ると言う事なのでしょうね(^^) > 確かにONnojiさんのHPにも、作業の中断が出来ると便利と書いていました。
確かに「進捗状況を見える化する」という目的もありますよ。
整形ユーティリティでイベント処理ファイルを整形する時に、
[整形エンジン]と表示されたプログレスバーを表示する小さなフォームが現れますが、
これが「作業の中断が出来るプログレスバー」です。
ただし、これは難易度が非常に高いです。
なぜかというと、主ウィンドウ(整形1〜4)側には、整形エンジンが搭載されていなくて、
「プログレスバーのフォーム」が進捗表示と実際の整形処理を行っているのです。
この点は重要で、「外部プログレスバー(フォーム)」の場合には、
単なる見かけ上のプログレスバーではなく、実体としての「モーダルフォームのプログレスバー」なのです。
なので、難易度が高くなるのです。
最初から「外部プログレスバー(フォーム)」を作るのは困難ですので、最初は内部プログレスバーにします。
つまり、フォームヘッダ部にプログレスバー(ラベルオブジェクト)を配置します。
この形式の例は、整形ユーティリティ(整形1〜4)のフォームヘッダ部にある
[変数チェック]ボタンを実行して現れる「変数チェック」ウィンドウのプログレスバーです。
>>A.の場合には、以下のような感じ。※あくまでもアバウトなフィーリングです。細かいことは気にしないこと > プログレスバーの道しるべありがとうございます! > いつの日か プログレスバーが必要な時 こちらの道しるべを参考にプルグラムを考えます(^^ゞ
あたかも疑似コードのような、まるでポンチ絵のような、とてもアバウトなものを示しましたが、
拙作webページの詳細な解説よりは取っ付き易いだろうと思います。
頭の中で想像して、イメージが沸いたら拙作webページの詳細な解説を読んでみてください。
35.1 内部プログレスバーと外部プログレスバー|桐の釣魚大全のトップ > フォームアプリケーション教書 第2部 http://silicon7565.html.xdomain.jp/guide/guide_Part2.htm#section35
ヒントとか閃きが得られるかもしれませんよ。
|
|
|
■記事リスト /
レス記事表示 →
[親記事-9]
[10-19]
[20-29]
[30-32]
|