#pragma once
#include "BasicUsageEnvironment.hh"
#include "liveMedia.hh"
#include <mutex>
#include <condition_variable>
#include <thread>
#include <string>
namespace libobsensor {
class ObUsageEnvironment : public BasicUsageEnvironment {
public:
static ObUsageEnvironment *createNew(TaskScheduler &taskScheduler);
virtual UsageEnvironment &operator<<(char const *str) override;
virtual UsageEnvironment &operator<<(int i) override;
virtual UsageEnvironment &operator<<(unsigned u) override;
virtual UsageEnvironment &operator<<(double d) override;
virtual UsageEnvironment &operator<<(void *p) override;
protected:
ObUsageEnvironment(TaskScheduler &taskScheduler);
virtual ~ObUsageEnvironment() noexcept override;
private:
void outputLog();
private:
std::thread outputLogThread_;
std::string logMsg_;
std::mutex mutex_;
std::condition_variable newLogCv_;
bool destroy_;
bool newLog_;
};
}