سؤال

ولقد اثنين من نظام يدعو GetSystemTime () وGetThreadTimes () أنني بحاجة لحساب استخدام CPU بخيط رفيع Win32 ومعين.

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

والسبب هو أن في بعض الأحيان أنا في نهاية المطاف مع نسبة أكثر من 100٪ (~ 1 في 500).

وكيف يمكنني ضمان تنفيذ الذري من المكالمات وظيفة 2؟

وشكرا، ساشين

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

المحلول

وأفضل رهان سيتم تكليف موضوع الحوسبة أولوية في الوقت الحقيقي. المواضيع في الوقت الحقيقي فقط الحصول على استبق بواسطة خيوط أخرى الحقيقي (أو تلك عززت الأولوية في الوقت الحقيقي).

نصائح أخرى

وأنا لست متأكدا من ذلك يمكنك. إلا إذا كنت تعرف ما هي العمليات الكامنة في كل وظيفة، ومنذ وقوعها أن تكون المكالمات API ويندوز ... حظا سعيدا.

وأليس من الممكن ضبط لمجرد النسب أكثر من 100؟

perc = ( perc > 100.0f ) ? 100.0f : perc;

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

هل كان استدعاء وظائف بالترتيب المعاكس مساعدة؟ (99٪ هي أفضل من 101٪ ...)

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

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