You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//
// Created by zhaohe on 19-5-21.
//
#pragma once
#include <atomic>
#include <fstream>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <mutex>
#include <set>
#include <sstream>
#include <string>
#include <thread>
#include <vector>
//
#include "iflytopcpp/core/basic/signal/signal.hpp"
#include "iflytopcpp/core/spdlogfactory/logger.hpp"
#include "iflytopcpp/core/zexception/zexception.hpp"
namespace iflytop { namespace core { using namespace std; class Thread; class Thread { ENABLE_LOGGER(Thread);
public: private: string name; pthread_t id = 0; function<void()> run; std::mutex lock_; unique_ptr<std::thread> workThread; atomic_bool hasJointd = {false}; atomic_bool exitFlag = {false}; bool waitingForJoin = false; /*当前线程是否运行退出等待回收*/ Singal signal;
Thread(std::function<void()> run);
public: Thread(string name, function<void()> run); void wake(); void join(); bool isWaitingForJoin() { return waitingForJoin; } bool getExitFlag() { return exitFlag; } pthread_t getId() const;
void sleep() { signal.sleep(); } void sleepForMs(int64_t ms) { signal.sleep_for_us(ms * 1000); }
~Thread();
private: const shared_ptr<zexception> &getExitException() const; }; class ThisThread { Thread *m_thread = NULL;
public: ThisThread(); pthread_t getId() const { return pthread_self(); } bool getExitFlag(); void sleep(); void sleepForMs(int64_t ms); void wake(); };
} // namespace core
} // namespace iflytop
|