سؤال

تعمل وظيفة CDIrscan Nextl "الذعر الرئيسي Kern-EXEC 0" 0 "إذا لم يتم استدعاؤها بشكل صحيح SETSSCANTATAL () (أي إذا كان يسمى في وقت لاحق داخل نفس الكائن النشط بعد حدث آخر)

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 متغير صلاحيته؟ لاحظ أن الحدث غير المتزامن لا علاقة له، يمكن أن يكون بموجب توقيت دمية بسيط.

هل كانت مفيدة؟

المحلول

كتبت بعض رمز الاختبار في محاولة لإعادة إنتاج هذا ولكن لم أستطع.

عمومًا، KERN-EXEC 0 غالبا ما تسبب الذعر من مقابض كائن ص قديمة. على سبيل المثال، تأكد من أن RFs التعامل معك CDirScan غير مغلق مبكرا جدا.

نصائح أخرى

هل يمكنك نشر المزيد من التعليمات البرمجية الخاصة بك لتحليلها؟

هل هذا الجزءان من الكود في وظائف مختلفة F1 أو F2 أو كليهما في وظيفة واحدة F1، وهذا غير واضح بالنسبة لي؟

أيضا إذا كان IDIRSCAN جزء من صفك، يجب ألا تتركه في وظيفة Cleanup Stack (NEWLC).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top