Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में प्रोग्राम को मिलीसेकंड के लिए स्लीप करना


C++ में प्रोग्राम को निर्दिष्ट मिलीसेकंड के लिए स्लीप (पॉज) करने के कई तरीके हैं। आधुनिक C++ (C++11+) में <chrono> और <thread> का उपयोग करना सबसे अच्छा है।

विधि 1: C++11 std::this_thread::sleep_for (सिफारिश)

#include <iostream>
#include <chrono>
#include <thread>
using namespace std;
using namespace std::chrono;

void sleepMs(int milliseconds) {
    this_thread::sleep_for(milliseconds(ms));
}

int main() {
    cout << "Starting 2 second sleep...\n";
    sleepMs(2000);
    cout << "Woke up after 2 seconds!\n";
    
    // अन्य अवधियाँ
    this_thread::sleep_for(500ms);      // 500 ms (C++14 literal)
    this_thread::sleep_for(1s);         // 1 सेकंड
    this_thread::sleep_for(1min);       // 1 मिनट
    
    return 0;
}

विधि 2: POSIX usleep/nanosleep (Linux/Unix)

#include <iostream>
#include <unistd.h>     // usleep (deprecated)
#include <time.h>       // nanosleep
using namespace std;

void sleepMsPosix(int ms) {
    // nanosleep - अधिक सटीक
    struct timespec req;
    req.tv_sec = ms / 1000;
    req.tv_nsec = (ms % 1000) * 1000000;
    nanosleep(&req, nullptr);
}

int main() {
    cout << "Sleeping 1500 ms...\n";
    sleepMsPosix(1500);
    cout << "Done\n";
    return 0;
}

विधि 3: Windows Sleep()

#include <iostream>
#include <windows.h>
using namespace std;

int main() {
    cout << "Sleeping 3000 ms (Windows)...\n";
    Sleep(3000);  // मिलीसेकंड में
    cout << "Done\n";
    return 0;
}

विधि 4: क्रॉस-प्लेटफॉर्म फंक्शन

#include <iostream>
#include <chrono>
#include <thread>

#if defined(_WIN32)
    #include <windows.h>
    void crossSleep(int ms) { Sleep(ms); }
#else
    #include <unistd.h>
    void crossSleep(int ms) { usleep(ms * 1000); }
#endif

int main() {
    crossSleep(1000);  // 1 सेकंड हर प्लेटफॉर्म पर
    return 0;
}

विधि 5: बिजी वेट (clock() - मूल आर्टिकल अनुसार)

#include <iostream>
#include <ctime>
using namespace std;

void busySleep(int ms) {
    clock_t end = clock() + ms * CLOCKS_PER_SEC / 1000;
    while (clock() < end) {
        // बिजी वेट - CPU 100% उपयोग करता है!
    }
}

int main() {
    cout << "Busy waiting 1000 ms...\n";
    busySleep(1000);
    cout << "Done (CPU was 100% busy)\n";
    return 0;
}

तुलना

विधिप्लेटफॉर्मCPU उपयोगसटीकतासिफारिश
sleep_forसभी (C++11)0% (ब्लॉक्स)अच्छी⭐ सर्वश्रेष्ठ
nanosleepPOSIX0%उच्चLinux सिस्टम प्रोग्रामिंग
Sleep/usleepप्लेटफॉर्म-विशिष्ट0%मध्यमलेगेसी कोड
बिजी वेट (clock)सभी100% ❌कमकभी नहीं (सिवाय रियल-टाइम)

चेतावनी: मूल आर्टिकल का clock() बिजी-वेट दृष्टिकोण CPU को 100% उपयोग करता है - प्रोडक्शन कोड में कभी उपयोग न करें!

  1. - C++ प्रोग्राम: ग्रिड में रोबोट की यात्रा का कुल खर्च ज्ञात करना

    समस्या विवरण हमें h x w आयाम का एक ग्रिड दिया गया है। ग्रिड के प्रत्येक सेल में एक धनात्मक पूर्णांक है। एक पथ-खोज रोबोट एक विशेष सेल (p, q) पर रखा गया है और इसे सेल (i, j) पर ले जाया जा सकता है। एक चाल की लागत |p - i| + |q - j| के बराबर होती है। q संख्या में यात्राएं हैं, जिनमें प्रत्येक के निम्नलि

  1. C++ प्रोग्राम बाईसेक्शन मेथड के लिए C++ प्रोग्राम बाईसेक्शन मेथड के लिए

    फंक्शन f(x) दिया गया है जिसमें संख्या a और b हैं जहां, f(a) * f(b) > 0 और फंक्शन f(x) a और b के बीच होना चाहिए यानी f(x) = [a, b]। कार्य बाईसेक्शन मेथड का उपयोग करके फंक्शन f(x) में अंतराल a और b के बीच स्थित रूट का मान खोजना है।बाईसेक्शन मेथड क्या है?बाईसेक्शन मेथड का उपयोग फंक्शन f(x) में दिए ग

  1. C++ में पिरामिड के आयतन का प्रोग्राम C++ में पिरामिड के आयतन का प्रोग्राम

    पिरामिड के बेस के प्रकार के आधार पर भुजाएं दी गई हैं, कार्य पिरामिड का आयतन गणना करना है।पिरामिड एक 3-D आकृति है जिसकी बाहरी सतहें त्रिकोणीय हैं जो सामान्य बिंदु पर मिलती हैं जिससे पिरामिड का तीक्ष्ण किनारा बनता है। पिरामिड का आयतन उसके बेस के प्रकार पर निर्भर करता है।पिरामिड के बेस के विभिन्न प्रका