From 346b276c0a78e41c9f0896da9cc11d46a578eb68 Mon Sep 17 00:00:00 2001 From: impressionyang Date: Sun, 24 Jan 2021 14:54:05 +0800 Subject: [PATCH] first initial update --- README.md | 10 +++++++++ timeout_test/Makefile | 13 ++++++++++++ timeout_test/ctimeout.cpp | 43 ++++++++++++++++++++++++++++++++++++++ timeout_test/ctimeout.h | 19 +++++++++++++++++ timeout_test/main.cpp | 20 ++++++++++++++++++ timeout_test/timeout_test | Bin 0 -> 17616 bytes 6 files changed, 105 insertions(+) create mode 100644 README.md create mode 100644 timeout_test/Makefile create mode 100644 timeout_test/ctimeout.cpp create mode 100644 timeout_test/ctimeout.h create mode 100644 timeout_test/main.cpp create mode 100755 timeout_test/timeout_test diff --git a/README.md b/README.md new file mode 100644 index 0000000..680137a --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +# linux cpp timeout package class + +it is use to check timeout in a task in linux c plus plus + +## how to use + + 1. `include "ctimeout.h"` + 2. define object `CTimeOut timeout` + 3. set the timeout whit time `timeout.set_timeout_msec(1000)` + 4. then you can check if the time in your task is timeout you can use `timeout.is_timeout()`to get a bool return to confirm it diff --git a/timeout_test/Makefile b/timeout_test/Makefile new file mode 100644 index 0000000..9c1b09c --- /dev/null +++ b/timeout_test/Makefile @@ -0,0 +1,13 @@ +object = main.o ctimeout.o +run_target = timeout_test +LFLAG = + +main : $(object) + g++ -o $(run_target) $(object) $(LFLAG) + +main.o : main.cpp +ctimeout.o : ctimeout.h ctimeout.cpp + +.PHONY : clean +clean: + rm $(object) \ No newline at end of file diff --git a/timeout_test/ctimeout.cpp b/timeout_test/ctimeout.cpp new file mode 100644 index 0000000..8a5b4d5 --- /dev/null +++ b/timeout_test/ctimeout.cpp @@ -0,0 +1,43 @@ +#include "ctimeout.h" + +int CTimeOut::set_timeout_msec(int msec) +{ + if (msec <= 0) { + return 1; + } + + gettimeofday(&timeout_set, NULL); + + // 分解设置的毫秒数 + long usec2add = (msec & 1000) * 1000; + int sec2add = (msec / 1000); + + // 算出加上超时时间后的微秒数和秒数 + long real_usec = (timeout_set.tv_usec + usec2add) % 1000000; + int real_sec = ((timeout_set.tv_usec + usec2add) / 1000000) + sec2add + timeout_set.tv_sec; + + // 设置超时的时间 + timeout_set.tv_sec = real_sec; + timeout_set.tv_usec = real_usec; + + return 0; +} + +int CTimeOut::set_timeout_sec(int sec) +{ + if (sec <= 0) { + return 1; + } + + gettimeofday(&timeout_set, NULL); + + timeout_set.tv_sec += sec; + + return 0; +} + +bool CTimeOut::is_timeout() +{ + gettimeofday(&timeout_now, NULL); + return timeout_now.tv_sec >= timeout_set.tv_sec && timeout_now.tv_usec >= timeout_set.tv_usec; +} \ No newline at end of file diff --git a/timeout_test/ctimeout.h b/timeout_test/ctimeout.h new file mode 100644 index 0000000..28e56e0 --- /dev/null +++ b/timeout_test/ctimeout.h @@ -0,0 +1,19 @@ +#ifndef _TIMEOUT_H_ +#define _TIMEOUT_H_ + +#include +#include + +class CTimeOut +{ +public: + int set_timeout_msec(int msec); + int set_timeout_sec(int sec); + bool is_timeout(); + +private: + timeval timeout_set; + timeval timeout_now; +}; + +#endif \ No newline at end of file diff --git a/timeout_test/main.cpp b/timeout_test/main.cpp new file mode 100644 index 0000000..94418ff --- /dev/null +++ b/timeout_test/main.cpp @@ -0,0 +1,20 @@ +#include "ctimeout.h" +#include + +using namespace std; + +int main(int argc, char **argv) +{ + CTimeOut timeout; + int i = 0; + + timeout.set_timeout_msec(500); + while (1) { + if (timeout.is_timeout()) { + cout << "i = " << i++ << endl; + timeout.set_timeout_msec(500); + } + } + + return 0; +} \ No newline at end of file diff --git a/timeout_test/timeout_test b/timeout_test/timeout_test new file mode 100755 index 0000000000000000000000000000000000000000..a46a1229a8563c60474c312f3585cc3a5e8627ce GIT binary patch literal 17616 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 J4h2V3{2Mad5EcLc literal 0 HcmV?d00001