X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libtest%2Fwait.h;h=f81a29ad85e0762d5124af8908cf3c52a9207464;hb=11f92a5b87291fd499db5897800fafacd654f6e9;hp=d72a897bac938efa04af39c9f4ea23ac9be6d910;hpb=8fa241b9251e81929bd07410e9f598c88ee08242;p=m6w6%2Flibmemcached diff --git a/libtest/wait.h b/libtest/wait.h index d72a897b..f81a29ad 100644 --- a/libtest/wait.h +++ b/libtest/wait.h @@ -24,6 +24,9 @@ #include #include +#include + +#include namespace libtest { @@ -38,6 +41,12 @@ public: uint32_t this_wait; uint32_t retry; + if (filename.empty()) + { + _successful= false; + return; + } + for (waited= 0, retry= 1; ; retry++, waited+= this_wait) { if (access(filename.c_str(), R_OK) == 0) @@ -51,13 +60,31 @@ public: } this_wait= retry * retry / 3 + 1; - sleep(this_wait); -#ifdef WIN32 - sleep(this_wait); -#else - struct timespec global_sleep_value= { this_wait, 0 }; - nanosleep(&global_sleep_value, NULL); -#endif + libtest::dream(this_wait, 0); + } + } + + Wait(const pid_t &_pid_arg, uint32_t timeout= 6) : + _successful(false) + { + uint32_t waited; + uint32_t this_wait; + uint32_t retry; + + for (waited= 0, retry= 1; ; retry++, waited+= this_wait) + { + if (kill(_pid_arg, 0) == 0) + { + _successful= true; + break; + } + else if (waited >= timeout) + { + break; + } + + this_wait= retry * retry / 3 + 1; + libtest::dream(this_wait, 0); } }