first initial update

This commit is contained in:
Alvin Young 2021-01-24 14:54:05 +08:00
commit 346b276c0a
6 changed files with 105 additions and 0 deletions

10
README.md Normal file
View File

@ -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

13
timeout_test/Makefile Normal file
View File

@ -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)

43
timeout_test/ctimeout.cpp Normal file
View File

@ -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;
}

19
timeout_test/ctimeout.h Normal file
View File

@ -0,0 +1,19 @@
#ifndef _TIMEOUT_H_
#define _TIMEOUT_H_
#include <sys/time.h>
#include <unistd.h>
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

20
timeout_test/main.cpp Normal file
View File

@ -0,0 +1,20 @@
#include "ctimeout.h"
#include <iostream>
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;
}

BIN
timeout_test/timeout_test Executable file

Binary file not shown.