処理途中の終了方法 – プログラミング – Home

通知
すべてクリア

[解決済] 処理途中の終了方法


ゆきな
 ゆきな
(@ゆきな)
ゲスト
結合: 17年前
投稿: 6
Topic starter  

こんにちは。いつも困った時に参考にさせていただいています。
少しつまずいてしまって…
皆様から少しのヒントでも頂けたら嬉しいです。

~~~~~~~~~~↓ここから
↓~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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文に入ってしまうと、一切ダイアログの操作を
受け付けなくなってしまう。

「開始」ボタンがあり、オープンするファイルの選択後「開始」を押下すると上記コード
に入る仕様です。

上記コードは非常に簡略化させたものですが、大きなファイルを読み込んだとしたらもの
すごく遅くなってしまい、
最悪フリーズしてしまいます。

そこで、ボタンを一つ追加し、処理途中でもボタンが押されたらアプリを強制終了させる
ような
処理を追加させたいのですが、どの用に実装したらよろしいでしょうか?
不明点でも書いてありますが、一度「開始」ボタンを押すと他のボタンを押しても何も受
け付けなくなってしまうのです。

解りにくい説明かもしれませんが、お力を貸してください。
お願いします。


引用未解決
トピックタグ
ゆきな
 ゆきな
(@ゆきな)
ゲスト
結合: 17年前
投稿: 6
Topic starter  

すいません。
フォーマットが崩れてしまいました。
もう一度張りなおします。

~~~~↓ここから↓~~~~

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文に入ってしまうと、一切ダイアログの操作を
      受け付けなくなってしまう。

「開始」ボタンがあり、オープンするファイルの選択後「開始」を押下すると上記コード
に入る仕様です。
上記コードは非常に簡略化させたものですが、大きなファイルを読み込んだとしたらもの
すごく遅くなってしまい、最悪フリーズしてしまいます。
そこで、ボタンを一つ追加し、処理途中でもボタンが押されたらアプリを強制終了させる
ような処理を追加させたいのですが、どの用に実装したらよろしいでしょうか?
不明点でも書いてありますが、一度「開始」ボタンを押すと他のボタンを押しても何も受
け付けなくなってしまうのです。解りにくい説明かもしれませんが、お力を貸してくださ
い。お願いします。


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

ファイル処理をする部分をワーカスレッドにします。
時間がかかる処理を書くときの定番ですね。
_beginthread()、MFCならAfxBeginThread()を調べてください。

「マルチスレッド」でヘルプを探せば使用例も載っています。


返信引用
ゆきな
 ゆきな
(@ゆきな)
ゲスト
結合: 17年前
投稿: 6
Topic starter  

ワーカースレッド
検索したら今の私と同じような例がたくさん出てきて、
その回避方法がたくさん載っていました。なんとか出来そうです。
もし解らないことが新たに出てきたら質問させていただきます。
ありがとうございました!


返信引用
ゆきな
 ゆきな
(@ゆきな)
ゲスト
結合: 17年前
投稿: 6
Topic starter  

解決し忘れました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました