こんにちは。いつも困った時に参考にさせていただいています。
少しつまずいてしまって…
皆様から少しのヒントでも頂けたら嬉しいです。
~~~~~~~~~~↓ここから
↓~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Size = GetFileSize( hdOpen, NULL ); //ファイルサイズ取得( 4GB以上のファイル
も対応できるよう上位値も取得してあります )
Size = Size / 3072; //ファイルサイズを3KBで割った数値分繰り返す
m_Progress.SetRange32(0, Size); //プログレスバー範囲指定
//==================================================================================
// ファイルサイズ / 3KB 分 読み込み&書き込み
//==================================================================================
for ( Loop = 0; Loop < Size; Loop++ )
{
ReadFile( hdOpen, … … ); //読み込み
WriteFile( hdWright, … …); //別ファイルに書き込み
SetFilePointer( hdOpen, … …) //読み込みファイルポインタの移動
m_Progress.SetPos(Loop); //プログレスバー更新
}
~~~~~~~~~~↑ここまで
↑~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
※ 開発環境
コンパイラ :Visual Studio 2005 Professional
OS :WindowsXP SP2
【アプリ概要】:MFCにてファイルの読み書きをするアプリケーション。
【追加仕様】:ボタンを一つ追加し、処理の途中でもそのボタンが押されたら
アプリを強制終了させる。
→5GB以上のファイルを読み込むと、フリーズしたり時間がかか
り過ぎたりしてしまう為、
ユーザの判断で途中終了させるという選択を追加したい。
【不明点】:一度読み書きするfor文に入ってしまうと、一切ダイアログの操作を
受け付けなくなってしまう。
「開始」ボタンがあり、オープンするファイルの選択後「開始」を押下すると上記コード
に入る仕様です。
上記コードは非常に簡略化させたものですが、大きなファイルを読み込んだとしたらもの
すごく遅くなってしまい、
最悪フリーズしてしまいます。
そこで、ボタンを一つ追加し、処理途中でもボタンが押されたらアプリを強制終了させる
ような
処理を追加させたいのですが、どの用に実装したらよろしいでしょうか?
不明点でも書いてありますが、一度「開始」ボタンを押すと他のボタンを押しても何も受
け付けなくなってしまうのです。
解りにくい説明かもしれませんが、お力を貸してください。
お願いします。
すいません。
フォーマットが崩れてしまいました。
もう一度張りなおします。
~~~~↓ここから↓~~~~
Size = GetFileSize( hdOpen, NULL ); //ファイルサイズ取得
Size = Size / 3072; //ファイルサイズを3KBで割った数値分繰り返す
m_Progress.SetRange32(0, Size); //プログレスバー範囲指定
//=======================================================
// ファイルサイズ / 3KB 分 読み込み&書き込み
//=======================================================
for ( Loop = 0; Loop < Size; Loop++ )
{
ReadFile( hdOpen, … … ); //読み込み
WriteFile( hdWright, … …); //別ファイルに書き込み
SetFilePointer( hdOpen, … …) //読み込みファイルポインタの移動
m_Progress.SetPos(Loop); //プログレスバー更新
}
~~~~↑ここまで↑~~~~
※ 開発環境
コンパイラ :Visual Studio 2005 Professional
OS :WindowsXP SP2
【アプリ概要】:MFCにてファイルの読み書きをするアプリケーション。
【追加仕様】:ボタンを一つ追加し、処理の途中でもそのボタンが押されたらアプリを
強制終了させる。
→5GB以上のファイルを読み込むと、フリーズしたり時間がかかり過ぎたり
してしまう為、ユーザの判断で途中終了させる選択を追加したい。
【不明点】:一度読み書きするfor文に入ってしまうと、一切ダイアログの操作を
受け付けなくなってしまう。
「開始」ボタンがあり、オープンするファイルの選択後「開始」を押下すると上記コード
に入る仕様です。
上記コードは非常に簡略化させたものですが、大きなファイルを読み込んだとしたらもの
すごく遅くなってしまい、最悪フリーズしてしまいます。
そこで、ボタンを一つ追加し、処理途中でもボタンが押されたらアプリを強制終了させる
ような処理を追加させたいのですが、どの用に実装したらよろしいでしょうか?
不明点でも書いてありますが、一度「開始」ボタンを押すと他のボタンを押しても何も受
け付けなくなってしまうのです。解りにくい説明かもしれませんが、お力を貸してくださ
い。お願いします。
ファイル処理をする部分をワーカスレッドにします。
時間がかかる処理を書くときの定番ですね。
_beginthread()、MFCならAfxBeginThread()を調べてください。
「マルチスレッド」でヘルプを探せば使用例も載っています。
ワーカースレッド
検索したら今の私と同じような例がたくさん出てきて、
その回避方法がたくさん載っていました。なんとか出来そうです。
もし解らないことが新たに出てきたら質問させていただきます。
ありがとうございました!
解決し忘れました。