#include <thread>
#include <mutex>
#include <atomic>
#include <chrono>
#include <curl/curl.h>
class SuspendGuard {
public:
SuspendGuard() {
_mutex.lock();
_suspended = true;
_last_check_time = std::chrono::system_clock::now();
}
~SuspendGuard() {
_mutex.unlock();
_suspended = false;
}
bool IsSuspended() {
std::unique_lock<std::mutex> lock(_mutex);
// Son kontrolden bu yana geçen süreyi kontrol et
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
std::chrono::duration<double> time_diff = now - _last_check_time;
if (time_diff.count() > SUSPEND_CHECK_INTERVAL) {
// Süspansiyon algılandı
_suspended = true;
}
return _suspended;
}
private:
static constexpr double SUSPEND_CHECK_INTERVAL = 1.0; // Saniye
std::mutex _mutex;
std::atomic<bool> _suspended;
std::chrono::system_clock::time_point _last_check_time;
// İnternetten saati kontrol et
std::chrono::system_clock::time_point GetSystemTime() {
CURL *curl = curl_easy_init();
if (!curl) {
return std::chrono::system_clock::now();
}
struct curl_slist *headers = nullptr;
headers = curl_slist_append(headers, "Accept: application/json");
curl_easy_setopt(curl, CURLOPT_URL, "https://www.google.com/");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
std::chrono::system_clock::time_point now;
curl_easy_getinfo(curl, CURLINFO_TIME_HTTP, &now);
curl_easy_cleanup(curl);
return now;
}
};
// Suspend korumasını herhangi bir fonksiyona inline olarak entegre etmek için aşağıdaki kodu kullanabilirsiniz:
void MyFunction() {
SuspendGuard guard;
// ...
}