lichao
2021-03-31 6eefba812ede29549af3633c490f2e85a4805524
utest/util.h
@@ -19,21 +19,21 @@
#ifndef UTIL_W8A0OA5U
#define UTIL_W8A0OA5U
#include <functional>
#include <vector>
#include <thread>
#include <stdlib.h>
#include <chrono>
#include <sys/types.h>
#include <sys/wait.h>
#include <boost/noncopyable.hpp>
#include <boost/timer/timer.hpp>
#include <boost/test/unit_test.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include "bh_util.h"
#include "msg.h"
#include "shm.h"
#include "shm_queue.h"
#include "msg.h"
#include "bh_util.h"
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/noncopyable.hpp>
#include <boost/test/unit_test.hpp>
#include <boost/timer/timer.hpp>
#include <chrono>
#include <functional>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <thread>
#include <vector>
using namespace boost::posix_time;
inline ptime Now() { return second_clock::universal_time(); };
@@ -42,19 +42,25 @@
typedef std::function<void(void)> FuncVV;
class ScopeCall : private boost::noncopyable {
class ScopeCall : private boost::noncopyable
{
    FuncVV f_;
public:
    ScopeCall(FuncVV f):f_(f) { f_(); }
   ScopeCall(FuncVV f) :
       f_(f) { f_(); }
    ~ScopeCall() { f_(); }
};
class ThreadManager {
class ThreadManager
{
    std::vector<std::thread> threads_;
public:
    ~ThreadManager() { WaitAll(); }
    template <class T, class...P>
    void Launch(T t, P...p) { threads_.emplace_back(t, p...); }
    void WaitAll() {
   void WaitAll()
   {
        for (auto &t : threads_) {
            if (t.joinable()) {
                t.join();
@@ -62,12 +68,15 @@
        }
    }
};
class ProcessManager {
class ProcessManager
{
    std::vector<pid_t> procs_;
public:
    ~ProcessManager() { WaitAll(); }
    template <class T, class ...P>
    void Launch(T t, P...p) {
   void Launch(T t, P... p)
   {
        auto pid = fork();
        if (pid == 0) {
            // child
@@ -77,7 +86,8 @@
            procs_.push_back(pid);
        }
    };
    void WaitAll() {
   void WaitAll()
   {
        for (auto &pid: procs_) {
            int status = 0;
            int options = WUNTRACED | WCONTINUED;
@@ -92,7 +102,8 @@
struct ShmRemover {
    std::string name_;
    ShmRemover(const std::string &name):name_(name) { SharedMemory::Remove(name_); }
   ShmRemover(const std::string &name) :
       name_(name) { SharedMemory::Remove(name_); }
    ~ShmRemover() { SharedMemory::Remove(name_); }
};