سؤال

وأنا طاقتها 6 إشارات الواردة في هذا الموقع HTTP: // شبكة الاتصالات العالمية. cplusplus.com/reference/clibrary/csignal/signal.html

وثم ركضت بلدي التطبيق (النقر المزدوج لا يمر عبر IDE)، وحاول 1) انهاء المهمة 2) X على topright و3) عملية قتل. كنت أتوقع الأولين أن يسبب نوعا من إشارة (أنا على XP) ولكن للأسف حصلت شيء. أنا لا يسمح لفتح ملفات للكتابة إلى عند حدوث إشارة؟ انا التخمين أنا (يسمح SIGSEGV لي).

عند تحطم فايرفوكس أو عندما قتل ذلك، فإنه يتذكر ما صفحات كنت. هل تسجيل في كل عنوان كنت فوق صفحة أو يفعل ذلك في إشارة / تحطم؟

وسؤالي الرئيسي هو ما إشارة يمكنني استخدام للقبض على عملية القتل

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

المحلول

وWin32 ولا يوفر خيار لاعتراض البرنامج يقتلون مع TerminateProcess (وهو ما سيحدث عند "إنهاء المهمة" من إدارة المهام أو انقر على [X]).

ويمكنك التقاط إشارة SIGSEGV لأن مكتبة C وقت التشغيل يوفر ومضاهاة هذه الإشارة عند تشغيل ويندوز. عندما يؤدي البرنامج خرق وصول ويندوز (استثناء 0xC0000005) و، مكتبة وقت التشغيل لديها الخيار للقبض على ذلك ومحاكاة أسلوب SIGSEGV يونكس بالنسبة لك. هذا هو، ومع ذلك، ليست أفضل طريقة للتعامل مع مثل هذا الاستثناء. إذا كنت تكتب برنامج Win32، يجب أن لا نحاول عموما لاستخدام الخدمات على غرار يونكس.

نصائح أخرى

ويمكنك التقاط خطأ وقت التشغيل مثل انتهاك وصول إذا كنت تجاوز SetUnhandledExceptionFilter معالج الاستثناء الافتراضي استدعاء (هذا هو الدالة Win32 وعلى هذا النحو لا تعتمد على مضاهاة مكتبة C). هذه هي الطريقة يمكن استخدامها لتوفير "minidumps" عندما تعطل البرنامج.

ولكن سوف لا يتم استدعاء معالج هذا الاستثناء عند عادة إغلاق التطبيق الخاص بك، أو عند إغلاق التطبيق الخاص بك من مدير المهام. في النوافذ الحالة الأخيرة تدعو TerminateProcess، ليس اغلاق نظيفة لكنه اضطر البرنامج لإنهاء.

وأنا لست على علم الذي هو التنفيذ التي تستخدمها فايرفوكس، ولكن لحفظ علامات التبويب الحالية مفتوحة من المرجح أن يكون الموقت على التوالي، وفي كل مرة يتم تشغيله هو حفظ التاريخ لملف ونوع من القذرة علامة.

وغيرها من حلول أكثر تعقيدا للكشف عند إغلاق برنامج (التي تنفذها مكافحة الفيروسات وبرامج مماثلة) هو لاثنين من برامج لا علاقة لها التوالي، كل التحقق من أن البعض لا يزال قيد التشغيل، وإذا كان أحد الكشف عن الآخر تم إغلاق تشغيله مرة أخرى.

وتطبيقات ويندوز إما تطبيقات وحدة التحكم أو تطبيقات واجهة المستخدم الرسومية. تطبيقات وحدة التحكم تميل إلى الحصول على WM_CLOSE، وحدة التطبيقات CTRL_CLOSE_EVENT. لا إشارات. لا سترسل إذا انتهى التطبيق الخاص بك عن طريق TerminateProcess ().

إذا كنت تريد تخزين حيث كنت، استخدام ملف الذاكرة المعنونة وتحديث أنه في كل عمل. عند إنهاء عملية الخاص بك، الصفحة القذرة في الذاكرة هو مكتوب إلى ملف من قبل نظام التشغيل، وربما في لحظات أخرى أيضا. هذا الحل يسمح نظام التشغيل لإدارة القرص I / O بالنسبة لك، وانها في وضع أفضل للقيام بذلك.

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