first initial update
This commit is contained in:
commit
346b276c0a
10
README.md
Normal file
10
README.md
Normal 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
13
timeout_test/Makefile
Normal 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
43
timeout_test/ctimeout.cpp
Normal 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
19
timeout_test/ctimeout.h
Normal 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
20
timeout_test/main.cpp
Normal 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
BIN
timeout_test/timeout_test
Executable file
Binary file not shown.
Loading…
Reference in New Issue
Block a user