0
1
様々なソフトウェアに導入されているプログレスバーですが、あれは実際どのように実装されているのですか?
今まで使ったことが無く、調べても基本的なこと(毎秒ゲージが増えるだけとか)しか出てこなくて疑問に思いました。
仕組みはわかるんですが、実際に使用するとなるとよくわからないです・・・
ダウンロードなら総ファイル数から現在のパーセンテージを計算できますけど、
ファイルの送信や保存、画面のロードといったものはどうやって決められてるんですか?
メインで使用している言語はC++、C#、JavaScriptあたりです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
回答5件
#1
総合スコア144127
投稿2023/05/22 03:24
ファイルの送信なら送信した量をとる手段もありますし、中には適当に出している例もあるようです。
#2
総合スコア16598
投稿2023/05/22 05:50
全体量 と 処理された量 の比に基づいてプログレス・バーを動かせばいいんだけど...
なにがわからんのですかね?
#3
総合スコア112683
投稿2023/05/22 06:28
jsの場合、こんな感じでしょうか
- ファイルの送信→ どうしてもやりたければ分割アップロードする
- 保存→ jsで保存はただのダウンロード?(そもそもローカル→ロケールの保存でプログレスに頼るような処理はあまりかんがえられない)
- 画面のロード → レンダリングの経過を予測するのはむずかしいがSPAならパートごとのロード状態をカウント
#4
総合スコア11258
投稿2023/05/22 09:59
編集2023/05/22 10:11プログレスバーって,見せられる側の感覚としては「時間的な意味での進捗」(8分経過時点で80%表示になってたら→あと2分で終わるのかな,みたいな)を示していると捉える気がしますが,
実際にはそうでもなくて「99%まではさくっと進んで,それ以降ひたすら待たされる」みたいなのをわりとよく見かける気がします.
なので(?),実施する処理内容を{それらの所要時間とは無関係に,何らかの意味で}N個の小処理のシーケンスだとみなし,それらの小処理が完了する毎に表示を進める,みたいな使い方でも良いんじゃないかな,とか.
ただ,個人的にプログレスバーに期待する役割というのは,
相応に長くかかる処理に関して「コレ,止まっちゃってるんじゃねーの?」という疑惑を払拭することなので,
前記の「99%でずっと動かない」みたいなのは「意味ねーな」と思ってしまいます.
なので,自分で使う際には「ちょっとずつでも着実に進んでいることを示す」ようにこまめに更新するようにしています.
#5

退会済みユーザー
総合スコア0
投稿2023/05/23 01:09
当たり前の話ですが、プログレスバーを使って全体の何 % まで終了したかを表示するためには、何らかの方法で定期的にその時点での進捗状況を取得できる必要があります。
例えば、以下のようなプログレスバーのライブラリがありますが、それらは定期的に進捗状況を取得して全体の何 % まで終了したかの表示を更新するようにして使います。
C# (.NET のライブラリ)
ProgressBar クラス (WinForms 用)
https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.forms.progressbar?view=netframework-4.8
ProgressBar クラス (WPF 用)
https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.controls.progressbar?view=netframework-4.8
実装例は以下の記事を見てください。
WPF/Windowsフォーム:時間のかかる処理をバックグラウンドで実行するには?
https://atmarkit.itmedia.co.jp/ait/articles/1512/02/news019.html
JavaScript (jQuery プラグイン)
Progressbar
https://jqueryui.com/progressbar/
実装例は以下の記事を見てください。
なので、
ファイルの送信や保存、画面のロードといったものはどうやって決められてるんですか?
という場合、その処理中に定期的にその時点での進捗状況が取得できないとするとお手上げです。
そういう場合でも、処理の終わりは分かるケースがあると思いますので、進捗状況は適当に出しておいて、終わったら完了を通知するとかはできると思いますが。
ただ、そういう場合はプログレスバーで適当な数値を出すよりは、以下の画像のような表示の方が良さそうだと個人的には思います。
同じタグがついた質問を見る
C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。
Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。
JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。