2011-12-14 19 views
5

मैं सी में एक आवेदन के लिए समग्र कुल CPU उपयोग प्राप्त करना चाहते हैं, कुल CPU उपयोग जैसे हम TaskManager में मिलता है ... मैं जानना चाहता हूँ ... विंडोज और लिनक्स के लिए :: सभी ने वर्तमान कुल CPU उपयोग प्रक्रियाओं ..... जैसा कि हम कार्य प्रबंधक में देखते हैं।सी में सीपीयू उपयोग कैसे प्राप्त करें?

+2

क्या ऑपरेटिंग सिस्टम? क्या आप अपनी प्रक्रिया के लिए या किसी अन्य प्रक्रिया के लिए जवाब जानना चाहते हैं? –

+0

अच्छी तरह से, विंडोज़ में (7 सटीक होना) ... मैं जानना चाहता हूं ... सभी प्रक्रियाओं द्वारा वर्तमान कुल CPU उपयोग ..... जैसा कि हम कार्य प्रबंधक में देखते हैं .... – Ronin

+0

कृपया प्रश्न को संपादित करें इस नई जानकारी को प्रतिबिंबित करें। –

उत्तर

10

इस प्लेटफ़ॉर्म-विशिष्ट है:

  • Windows में, आप GetProcessTimes() फ़ंक्शन का उपयोग कर सकते हैं।
  • लिनक्स में, आप वास्तव में केवल clock() का उपयोग कर सकते हैं।

इनका उपयोग दो समय अंतराल के बीच किए गए CPU समय की मात्रा को मापने के लिए किया जा सकता है।

संपादित करें:

(एक प्रतिशत के रूप में) सीपीयू की खपत के लिए, आप, लॉजिकल कोर कि ओएस देखता है की # द्वारा कुल CPU समय को विभाजित करने की आवश्यकता होगी और उसके बाद कुल दीवार से विभाजित -Clock समय:

  • विंडोज:

    % CPU usage = (CPU time)/(# of cores)/(wall time) 
    

    लॉजिकल कोर की # हो रही भी प्लेटफ़ॉर्म-विशिष्ट है GetSystemInfo()

  • लिनक्स: sysconf(_SC_NPROCESSORS_ONLN)
+0

जो आप सुझाव देते हैं :: निर्दिष्ट प्रक्रिया के लिए समय की जानकारी प्राप्त करता है। .... लेकिन मुझे कुल CPU उपयोग (प्रतिशत) प्राप्त करने की आवश्यकता है - जैसे कि हम कार्य प्रबंधक में देखते हैं ..... क्या आप मदद कर सकते हैं ?? – Ronin

+0

जिनका उपयोग आप CPU समय का उपयोग करने के लिए किया जा सकता है। % CPU उपयोग प्राप्त करने के लिए, आपको इसे लॉजिकल कोर के # द्वारा विभाजित करने की आवश्यकता होगी जिसे ओएस देखता है। – Mysticial

+0

सीपीयू% उपयोग प्राप्त करने के लिए आपको आवश्यकता होगी (सीपीयू समय/# कोर */दीवार घड़ी का समय बीत गया *), लेकिन अन्यथा सही है। –

1

POSIX के अंतर्गत, आप getrusage (2) के ru_utime क्षेत्र चाहते हैं। केवल कॉलिंग प्रक्रिया के लिए RUSAGE_SELF का उपयोग करें, और RUSAGE_CHILDEN को सभी समाप्त कर दिया गया है और प्रतीक्षा करें (2) एड-ऑन बच्चों पर। लिनक्स केवल कॉलिंग थ्रेड के लिए RUSAGE_THREAD का भी समर्थन करता है। यदि आप सिस्टम समय चाहते हैं, तो ru_stime का उपयोग करें, जिसे कुल समय सक्रिय रूप से चलने (दीवार समय नहीं) के लिए ru_utime के साथ समझा जा सकता है।

1

यह आमतौर पर सिस्टम विशिष्ट कार्य कर रहा है।

आप clock समारोह इस्तेमाल कर सकते हैं, (शायद long की तरह, कुछ पूर्णांक प्रकार) एक clock_t लौटने। लिनक्स सिस्टम पर यह CPU समय को microseconds में मापता है।

+0

'clock_t' एक * अंकगणितीय * प्रकार है, इसलिए यह 'डबल' या 'फ्लोट' भी हो सकता है। – dreamlax

-1

कि सटीक बात मैं की तलाश में गया था। इसे अपने तरीके से जोड़ना, मैं इसे सफलतापूर्वक चलाता हूं।

Get total CPU usage

संबंधित मुद्दे