2009-11-14 35 views
9

की शुरुआत के बाद से कितने सेकंड बीत चुके हैं ट्रैक ट्रैक करना मैं एक प्रोग्राम लिख रहा हूं जिसका उपयोग सोलारिस मशीन पर किया जाएगा। मुझे कार्यक्रम की शुरुआत के बाद से कितने सेकंड बीत चुके हैं इसका ट्रैक रखने का एक तरीका चाहिए। मैं यहाँ बहुत सरल बात कर रहा हूँ। उदाहरण के लिए मेरे पास एक int सेकंड = 0 होगा; लेकिन मैं सेकंड सेकेंड के रूप में सेकेंड वैरिएबल को अपडेट करने के बारे में कैसे जाउंगा?सी ++ प्रोग्राम

ऐसा लगता है कि मैंने कई मशीनों पर केवल कुछ काम किए हैं, इसलिए मुझे यकीन नहीं है।

किसी भी सुझाव की सराहना की जाएगी।

आपके समय के लिए धन्यवाद।

+0

क्या आपको प्रत्येक सेकंड में एक ईवेंट की आवश्यकता है? कुछ अपडेट करें? या सिर्फ कार्यक्रम चलाने के कुल सेकंड? – Dani

उत्तर

0

आवेदन शुरू होने पर आपको बस दिनांक/समय स्टोर करने की आवश्यकता है। जब भी आपको यह प्रदर्शित करने की ज़रूरत है कि आपका प्रोग्राम कितना समय चल रहा है, वर्तमान दिनांक/समय प्राप्त करें और जब एप्लिकेशन शुरू हुआ तब घटाएं।

20

एक बहुत ही सरल विधि:

#include <time.h> 
time_t start = time(0); 

double seconds_since_start = difftime(time(0), start); 

इसका मुख्य दोष यह है कि आप अद्यतन के लिए मतदान करना है। घटना के आधार पर आपको ऐसा करने के लिए प्लेटफ़ॉर्म समर्थन या कुछ अन्य lib/ढांचे की आवश्यकता होगी।

+3

'समय()' रिटर्न वॉल-घड़ी का समय, 'घड़ी()' रिटर्न प्रोसेसर-टाइम देता है। –

+0

+1 मैन, मैं हमेशा दिनांक/समय सामान से भ्रमित हो जाता हूं :) – AraK

+0

'घड़ी() 'उपयोगी भी हो सकता है ... चूंकि ओपी केवल समय बीतने में रूचि रखता है, दीवार समय आवश्यक नहीं हो सकता है। इसके अतिरिक्त, लंबे समय से चलने वाले कार्यक्रमों के लिए, 'समय()' एनटीपी ड्रिफ्ट्स, डीएसटी, उपयोगकर्ता परिवर्तन इत्यादि जैसी चीजों से प्रभावित हो सकता है ... इससे परिणाम निकल सकते हैं। – jheddings

4

आप इसे पीछे की ओर देख रहे हैं। एक चर होने के बजाय आपको हर सेकेंड को अपडेट करने के बारे में चिंता करने की ज़रूरत है, बस वर्तमान समय के साथ प्रोग्राम पर एक वैरिएबल प्रारंभ करें, और फिर जब भी आपको पता चले कि कितने सेकंड बीत चुके हैं, तो आप उस प्रारंभिक समय से वर्तमान समय घटाते हैं। उस तरह से बहुत कम ओवरहेड, और कुछ समय से संबंधित परिवर्तनीय अद्यतन की देखभाल करने की कोई आवश्यकता नहीं है।

+1

"नर्सिंग" एक चर- अब यह एक अवधारणा है! एक जिसे अक्सर प्रदर्शन विचारों के लिए अनदेखा किया जाता है। कुल एएचए पल यहाँ ... – FredTheWebGuy

1
#include <stdio.h> 
#include <time.h> 
#include <windows.h> 
using namespace std; 
void wait (int seconds); 
int main() 
{ 
    time_t start, end; 
    double diff; 
    time (&start); //useful call 
    for (int i=0;i<10;i++) //this loop is useless, just to pass some time. 
    { 
    printf ("%s\n", ctime(&start)); 
    wait(1); 
    } 
    time (&end);//useful call 

    diff = difftime(end,start);//this will give you time spent between those two calls. 
    printf("difference in seconds=%f",diff); //convert secs as u like 
    system("pause"); 
    return 0; 
} 
void wait (int seconds) 
{ 
    clock_t endwait; 
    endwait = clock() + seconds * CLOCKS_PER_SEC ; 
    while (clock() < endwait) {} 
} 

इस सोलारिस पर ठीक से काम करना चाहिए/यूनिक्स भी, बस जीत refs

10

उपयोग std::chrono को हटा दें।

#include <chrono> 
#include <iostream> 

int main(int argc, char *argv[]) 
{ 
    auto start_time = std::chrono::high_resolution_clock::now(); 
    auto current_time = std::chrono::high_resolution_clock::now(); 

    std::cout << "Program has been running for " << std::chrono::duration_cast<std::chrono::seconds>(current_time - start_time).count() << " seconds" << std::endl; 

    return 0; 
} 

आप केवल कुछ सेकंड के एक संकल्प की जरूरत है, तो std::steady_clock पर्याप्त होना चाहिए।

+1

std :: chrono C++ 11 में नया है, इसलिए आपका कंपाइलर इसका समर्थन नहीं कर सकता है। – frnknstn

+2

मैंने सी ++ 11 दृष्टिकोण के लिए आपका जवाब +1 किया, लेकिन दुर्भाग्यवश यह मेरे जीसीसी 4.8.4 पर सी ++ 11 सक्षम के साथ संकलित नहीं है।हालांकि उत्पादन में 'duration_cast' का उपयोग कर रहा था:' std :: chrono :: duration_cast > (current_time - start_time) .count() '। – Scylardor

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