दिलचस्प पोस्ट
डायनेमिक रूप से बनाए गए <iframe> को <script> को अभिभावक पृष्ठ में स्क्रिप्ट चलाने क्यों लगता है? कोड में स्विच को खत्म करने के तरीके सेलेनियम वेबड्रायवर जावा के साथ जावास्क्रिप्ट का उपयोग कैसे करें HTML5 इतिहास एपीआई (पुशस्टेट?) का उपयोग करने के लिए अच्छा ट्यूटोरियल वसंत एनोटेशन-आधारित कॉन्फ़िगरेशन का उपयोग करते समय मानचित्रणजैकसन HttpMessageConverter कॉन्फ़िगर कैसे करें? एक NSView के लिए पृष्ठभूमि का रंग बदलने का सबसे अच्छा तरीका सरणी सूची के एक हैशप बनाने का सर्वोत्तम तरीका सी # जेआईटी कंपाइलिंग और .नेट जावा में वर्ग विशेषताओं पर बहुरूपता लागू होती है? प्रतिलिपि कन्स्ट्रक्टर C ++ में संदर्भ द्वारा अपने पैरामीटर को क्यों स्वीकार करना चाहिए? डॉकर छवि बनाम कंटेनर जावा में पुरातन के लिए संदर्भ से पास के बराबर कैसे करें क्या जावा आदिम इनट्स डिजाइन द्वारा या दुर्घटना से? सूची <DerivedClass> की सूची <BaseClass> परिवर्तित करें जावा () में प्रतीक्षा () और सूचित करें () का उपयोग करते हुए एक साधारण परिदृश्य

QueryPerformanceCounter का उपयोग कैसे करें?

मैंने हाल ही में तय किया है कि मुझे अपने टाइमर वर्ग के लिए मिलीसेकेंड का उपयोग करने के लिए माइक्रोसॉन्ड्स से बदलने की जरूरत है, और कुछ शोध के बाद मैंने यह निर्णय लिया है कि क्वेरीपरफेन्सन क्वॉर्टर शायद मेरा सबसे सुरक्षित शर्त है ( Boost::Posix पर चेतावनी Boost::Posix कि यह Win32 एपीआई पर काम नहीं कर सकता मुझे थोड़ी दूर डाल दिया) हालांकि, मुझे वाकई यकीन नहीं है कि इसे कैसे कार्यान्वित करें

मैं जो कुछ कर रहा हूं जो GetTicks() एस्क फ़ंक्शन को बुला रहा है मैं उपयोग कर रहा हूं और इसे टाइमर के startingTicks GetTicks() चर में निर्दिष्ट कर रहा हूं। फिर समय बीतने की मात्रा को खोजने के लिए मैं सिर्फ startTicks से फ़ंक्शन का रिटर्न वैल्यू घटाना चाहता हूं, और जब मैं टाइमर रीसेट करता हूँ, तो मैं फ़ंक्शन फिर से कॉल करता हूँ और इसे शुरु करने के लिए टाईक्स देता है। दुर्भाग्य से, मैंने जो कोड देख लिया है, वह उतना आसान नहीं है जितना कि QueryPerformanceCounter() कहता है, और मुझे यकीन नहीं है कि मुझे इसके तर्क के रूप में क्या देना चाहिए।

वेब के समाधान से एकत्रित समाधान "QueryPerformanceCounter का उपयोग कैसे करें?"

 #include <windows.h> double PCFreq = 0.0; __int64 CounterStart = 0; void StartCounter() { LARGE_INTEGER li; if(!QueryPerformanceFrequency(&li)) cout << "QueryPerformanceFrequency failed!\n"; PCFreq = double(li.QuadPart)/1000.0; QueryPerformanceCounter(&li); CounterStart = li.QuadPart; } double GetCounter() { LARGE_INTEGER li; QueryPerformanceCounter(&li); return double(li.QuadPart-CounterStart)/PCFreq; } int main() { StartCounter(); Sleep(1000); cout << GetCounter() <<"\n"; return 0; } 

इस प्रोग्राम को आउटपुट एक नंबर करीब 1000 (विंडोज़ नींद सही नहीं है, लेकिन यह 999 जैसा होना चाहिए) होना चाहिए।

StartCounter() फ़ंक्शन CounterStart चर में कार्यक्षमता काउंटर पर टिक की संख्या रिकॉर्ड करता है GetCounter() फ़ंक्शन मिलीसेकंड की संख्या देता है क्योंकि StartCounter() को अंतिम रूप से डबल कहा जाता था, इसलिए यदि GetCounter() 0.001 प्राप्त करता है, तो इसके बारे में 1 माइक्रोसॉंड होता है क्योंकि StartCounter() को बुलाया गया था।

यदि आप टाइमर का इस्तेमाल करना चाहते हैं, तो इसके बदले में बदलाव करें

 PCFreq = double(li.QuadPart)/1000.0; 

सेवा मेरे

 PCFreq = double(li.QuadPart); 

या यदि आप चाहते हैं कि माइक्रोसेकेंड तब उपयोग करें

 PCFreq = double(li.QuadPart)/1000000.0; 

लेकिन वास्तव में यह सुविधा के बारे में है, क्योंकि यह एक डबल देता है

मैं ये परिभाषित करता हूं:

 /** Use to init the clock */ #define TIMER_INIT \ LARGE_INTEGER frequency; \ LARGE_INTEGER t1,t2; \ double elapsedTime; \ QueryPerformanceFrequency(&frequency); /** Use to start the performance timer */ #define TIMER_START QueryPerformanceCounter(&t1); /** Use to stop the performance timer and output the result to the standard stream. Less verbose than \c TIMER_STOP_VERBOSE */ #define TIMER_STOP \ QueryPerformanceCounter(&t2); \ elapsedTime=(float)(t2.QuadPart-t1.QuadPart)/frequency.QuadPart; \ std::wcout<<elapsedTime<<L" sec"<<endl; 

उपयोग (पुन: परिभाषा को रोकने के लिए कोष्ठक):

 TIMER_INIT { TIMER_START Sleep(1000); TIMER_STOP } { TIMER_START Sleep(1234); TIMER_STOP } 

उपयोग के उदाहरण से आउटपुट:

 1.00003 sec 1.23407 sec 

यह मानते हुए कि आप Windows पर हैं (यदि ऐसा है तो आपको अपने प्रश्न को इस तरह से टैग करना चाहिए!), इस MSDN पृष्ठ पर आप एक सरल, उपयोगी HRTimer सी ++ क्लास के लिए स्रोत ढूंढ सकते हैं जो आपको आवश्यक सिस्टम कॉल को पूरा करने के लिए बहुत कुछ करना चाहता है आवश्यकता होती है (इसे GetTicks() विधि को जोड़ना आसान होगा, विशेष रूप से, जो वास्तव में आप की आवश्यकता होती है)।

गैर-विंडोज प्लेटफॉर्म्स पर, कोई प्रश्नप्ररूपता संपर्क समारोह नहीं है, इसलिए समाधान सीधे पोर्टेबल नहीं होगा। हालांकि, अगर आप इसे ऊपर बताए गए HRTimer रूप में किसी वर्ग में HRTimer , तो मौजूदा प्लेटफॉर्म को वास्तव में प्रदान करने के लिए क्लास के कार्यान्वयन को बदलना आसान होगा (शायद बूस्ट या जो भी हो!)

मैं इस प्रश्न को एनडीआईएस ड्राइवर उदाहरण के साथ समय पर प्राप्त कर सकता हूं। जैसा कि कोई जानता है, किकेसीसिस्टम टाइम (NdisGetCurrentSystemTime के तहत नकल) मिलीसेकेंड से कम रिज़ॉल्यूशन होता है, और कुछ नेटवर्क प्रोसेसर या अन्य आईआरपी जैसे प्रक्रियाएं हैं जिन्हें बेहतर टाइमस्टैम्प की आवश्यकता हो सकती है;

उदाहरण बस उतना सरल है:

 LONG_INTEGER data, frequency; LONGLONG diff; data = KeQueryPerformanceCounter((LARGE_INTEGER *)&frequency) diff = data.QuadPart / (Frequency.QuadPart/$divisor) 

जहां विभाजक 10 ^ 3 या 10 ^ 6 आवश्यक संकल्प के आधार पर होता है