ダイアログの「OK」ボタンをクリック後、1分程度の重い処理があります。
void CMyDialogMenu::OnOK()
{
//1分程度の処理
run_work();
}
run_work()の処理中で、PC上の任意のCSVファイルをエクセルで開くのに、なかなか開けませ
ん(30秒かかる)が、ノートパッドでは、すぐ開けます。
エクセルだけではなく、OFFICEのワードもそうです。
開発環境 OS:W2K、 VC++6.0、 OFFICE200
解決策教えていただきたいのです。よろしくお願い致します。
run_work の中がどうなってるのかわかりませんが
長~いループを回していたりすると、CPU パワーを食いつぶします。
実行中にタスクマネージャでそのプログラムの CPU 使用率を見てみてください。
run_work の処理中、CPU 使用率5%以下です。
OFFICE系ソフトが立ち上がるためのメモリ等のリソースが食いつぶされて
立ち上がれないことを示していると思われます
ディスクのアクセス状態や、メモリ消費状態、や
「シャノン さん」同様 run_work(); が何をしているものか
わからないと誰も機能改善に指摘できませんね!
シャノンさん、woodさん
ご回答ありがとうございました。自分も信じられませんが、リソースの問題ではないと思いま
す。
例えば、
void CMyDialogMenu::OnOK()
{
//100秒待ち
Sleep(100*1000);
}
Sleep()の100秒内で、Excelをファイル開くのに、最低30秒かかります。(OFFICE以外はOK)
リソースをチェックしたが、
CPU:<5%
物理メモリ(KB)
合計:522228
利用可能:163024
システムキャッシュ:313436
ディスクアクセス:ほぼありません
念のため確認しておきますが、そのような処理をしていないときは Office は普通に立
ち上がるんですよね?
処理をしていないときは Office は普通に立ち上がれます。
(Sleep()が始まった30秒後、立ち上がれます。不思議で仕方がないが、MFCでダイアログを作
成して、簡単に再現できます)