0

如果没有立即调用 CDirScan 函数 NextL,则引发“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

你能发布更多你的代码来分析吗?

这两部分代码是在不同的函数 f1、f2 中,还是两者都在一个函数 f1 中,这对我来说不清楚?

此外,如果 iDirScan 是您班级的一部分,则不应将其留在清理堆栈 (NewLC) 功能上。

于 2009-12-08T15:14:26.603 回答