0

CDirScan 関数 NextL は、SetScanDataL() がすぐに呼び出されない場合 (つまり、同じアクティブ オブジェクト内で別のイベントの後で呼び出された場合)、「Main Panic KERN-EXEC 0」を発生させます。

f1() - アクティブなオブジェクト内で呼び出されます

iDirScan = CDirScan::NewLC(aFs);
iDirScan->SetScanDataL(aPath, 
    KEntryAttDir|KEntryAttMatchExclusive, 
    ESortNone, CDirScan::EScanDownTree);
//wait for some asynchronous event

f2() - 非同期イベントの後、同じアクティブ オブジェクト内で呼び出されます

CDir* dir = NULL;
TRAPD(error, iDirScan->NextL(dir)); -->> "Main Panic KERN-EXEC 0"

何らかの非同期イベントを待機する前に iDirScan->NextL() が呼び出された場合、すべて正常に動作します。

CDirScan 変数が有効性を失うのはなぜですか? 非同期イベントには何も関係がないことに注意してください。単純なダミー タイマーである可能性があります。

4

2 に答える 2

2

これを再現するためにいくつかのテスト コードを書きましたが、できませんでした。

一般に、KERN-EXEC 0パニックはほとんどの場合、古い R オブジェクト ハンドルが原因で発生します。たとえば、RFs渡すハンドルがCDirScanあまりにも早く閉じられていないことを確認してください。

于 2009-12-07T09:08:36.033 に答える
0

分析するコードをもっと投稿していただけますか?

コードのこの 2 つの部分は、異なる関数 f1、f2 にあるのか、それとも両方が 1 つの関数 f1 にあるのか、はっきりしません。

また、iDirScan がクラスの一部である場合は、それをクリーンアップ スタック (NewLC) 関数に残すべきではありません。

于 2009-12-08T15:14:26.603 に答える