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% (ब्लॉक्स) | अच्छी | ⭐ सर्वश्रेष्ठ |
nanosleep | POSIX | 0% | उच्च | Linux सिस्टम प्रोग्रामिंग |
Sleep/usleep | प्लेटफॉर्म-विशिष्ट | 0% | मध्यम | लेगेसी कोड |
| बिजी वेट (clock) | सभी | 100% ❌ | कम | कभी नहीं (सिवाय रियल-टाइम) |
चेतावनी: मूल आर्टिकल का clock() बिजी-वेट दृष्टिकोण CPU को 100% उपयोग करता है - प्रोडक्शन कोड में कभी उपयोग न करें!