当前位置: 首页 > news >正文

合肥公司建设网站首页在哪个网站可以做外单衣服

合肥公司建设网站首页,在哪个网站可以做外单衣服,济南优化seo公司,android手机版线程池 线程池是一种多线程处理形式#xff0c;处理过程中它将被提交的任务分配给预先创建好的多个线程中的一个去执行。 线程池的实现 #pragma once #include pthread.h #include vector #include string #include unistd.h #include 处理过程中它将被提交的任务分配给预先创建好的多个线程中的一个去执行。 线程池的实现 #pragma once #include pthread.h #include vector #include string #include unistd.h #include pthread.h #include queue #include functional #include task.hpp #include thread.hpp using namespace ThreadModel; // void test(const std::string name) // {// while (1) // { // std::cout name is running.. std::endl; // sleep(1); // } // } const int Default_nums 3;template class T class ThreadPool {using func_t std::functionvoid(const std::string name);private:bool isEmpty(){return _task_queue.size() 0;}void Sleep(){pthread_cond_wait(_cond, _mutex);}void lockQueue(){pthread_mutex_lock(_mutex);}void wakeUp(){pthread_cond_signal(_cond);}void wakeUpAll(){pthread_cond_broadcast(_cond);}void unlockQueue(){pthread_mutex_unlock(_mutex);}void hadertask(const std::string name){lockQueue();while (true){while (isEmpty() _isrunning){_sleepnums;std::cout name star sleep std::endl;Sleep();std::cout name awaken std::endl;_sleepnums--;}if (isEmpty() !_isrunning){unlockQueue();std::cout name quit std::endl;break;}T t _task_queue.front();_task_queue.pop();unlockQueue();t();std::cout t.solve() std::endl;}}void init(){// 并将调用func时的第一个参数传递给hander函数。func_t func std::bind(ThreadPool::hadertask, this, std::placeholders::_1);for (int i 0; i _thread_nums; i){std::string name thread- std::to_string(i 1);_threads.emplace_back(name, func);std::cout name init sucess std::endl;}}ThreadPool(int thread_nums Default_nums) : _thread_nums(thread_nums), _sleepnums(0){init();pthread_mutex_init(_mutex, nullptr);pthread_cond_init(_cond, nullptr);}public:~ThreadPool(){pthread_cond_destroy(_cond);pthread_mutex_destroy(_mutex);}static ThreadPoolT * GetInstance(int thread_nums Default_nums){if (_tp nullptr){pthread_mutex_lock(_sig_mutx);if (_tp nullptr){_tp new ThreadPool(thread_nums);std::coutcreate instancestd::endl;}pthread_mutex_unlock(_sig_mutx);}std::coutget instancestd::endl;return _tp;}void start(){_isrunning true;std::cout threadpool is running: std::endl;for (auto thread : _threads) // 这个引用特别重要// 如果不传引用 thread 出了函数会被销毁 访问name 会出问题{thread.start();}}void equeue(const T in){// 拿数据和放数据要加锁 因为可能脏读lockQueue();if (_isrunning){_task_queue.push(in);if (_sleepnums 0){wakeUp();}}std::cout in.inquiry() std::endl;unlockQueue();}void stop(){wakeUpAll();std::cout threadpool stop std::endl;_isrunning false;}private:std::queueT _task_queue;int _thread_nums;std::vectorThread _threads;bool _isrunning;int _sleepnums;pthread_mutex_t _mutex;pthread_cond_t _cond;static ThreadPool *_tp;static pthread_mutex_t _sig_mutx; }; template class T ThreadPoolT *ThreadPoolT::_tp nullptr;template class T pthread_mutex_t ThreadPoolT::_sig_mutx PTHREAD_MUTEX_INITIALIZER; 日志类 #pragma once #include iostream #include string #include unistd.h #include sys/types.h #include ctime #include stdarg.h #include fstream #include cstring #include pthread.h #include lockerguard.hpp // namespace{} namespace log_ns { #define SCREEN_TYPE 1 #define FILE_TYPE 2pthread_mutex_t gmutex PTHREAD_MUTEX_INITIALIZER;enum level{DEBUG 1,INFO,WARNNING,ERROR,FATAL};std::string levelToString(int level){switch (level){case DEBUG:return DEBUG;case INFO:return INFO;case WARNNING:return WARNNING;case ERROR:return ERROR;case FATAL:return FATAL;default:return UNKNOW;}}std::string GetCurTime(){time_t now time(nullptr);struct tm *cur_time localtime(now);char buff[128];snprintf(buff, 128, %d-%02d-%02d %02d:%02d:%02d,cur_time-tm_year 1900,cur_time-tm_mon 1,cur_time-tm_mday,cur_time-tm_hour,cur_time-tm_min,cur_time-tm_sec);return buff;}class LogMessage{public:std::string _level; // 日志等级pid_t _id; // 进程号std::string _filename; // 文件名int _filenumber; // 行号std::string _cur_time; // 日志所写时间std::string _message_info; // 日志信息};const char *gfile ./log.txt;class Log{public:Log(const std::string logfile gfile) : _logFile(logfile), _type(SCREEN_TYPE){}void FlushLogToScreen(const LogMessage lg){printf([%s][%d][%s][%d][%s] %s,lg._level.c_str(),lg._id,lg._filename.c_str(),lg._filenumber,lg._cur_time.c_str(),lg._message_info.c_str());}void FlushLogToFile(const LogMessage lg){//std::ofstream out(_logFile, std::ios::app);if (!out.is_open())return;char buff[1024];snprintf(buff, sizeof(buff), [%s][%d][%s][%d][%s] %s,lg._level.c_str(),lg._id,lg._filename.c_str(),lg._filenumber,lg._cur_time.c_str(),lg._message_info.c_str());out.write(buff, strlen(buff));out.close();}void FlushLog(const LogMessage lg){LockGuard lockguard(gmutex);switch (_type){case SCREEN_TYPE:FlushLogToScreen(lg);break;case FILE_TYPE:FlushLogToFile(lg);break;default:break;}}void logMessage(int level, std::string filename, int filenumber, const char *format...){LogMessage lg;lg._level levelToString(level);lg._filename filename;lg._filenumber filenumber;lg._cur_time GetCurTime();lg._id getpid();va_list ap;va_start(ap, format);char buff[128];vsnprintf(buff, sizeof(buff), format, ap);va_end(ap);FlushLog(lg);}private:int _type;std::string _logFile;};Log lg; #define LOG(Level, Format, ...) \do \{ \lg.logMessage(Level, __FILE__, __LINE__, Format, ##__VA_ARGS__); \} while (0) #define EnableScreen() \do \{ \lg.Enable(SCREEN_TYPE); \} while (0) #define EnableFile() \do \{ \lg.Enable(FILE_TYPE); \} while (0) }单例模式 static ThreadPoolT * GetInstance(int thread_nums Default_nums){if (_tp nullptr){pthread_mutex_lock(_sig_mutx);if (_tp nullptr){_tp new ThreadPool(thread_nums);std::coutcreate instancestd::endl;}pthread_mutex_unlock(_sig_mutx);}std::coutget instancestd::endl;return _tp;}
http://www.w-s-a.com/news/622782/

相关文章:

  • 十大免费ppt网站下载重庆在线高校平台登录
  • 做环保网站案例百度seo教程
  • 体育用品网站模板网站建设话术
  • 潍坊网站建设服务商做网站多久能盈利
  • 嘉定区做网站房产信息查询官网
  • 网站直播间 是怎么做的唐山论坛建站模板
  • 深圳洲聚网站建设wordpress 泛解析
  • 五金东莞网站建设技术支持wordpress 添加模板
  • 网站申请专利春节网页设计素材
  • 进网站备案md风格的wordpress主题
  • 如何建站网站十大免费建站app
  • 工作号做文案素材的网站晋城网站设计人
  • 建设部网站官网 施工许可怎样建网站 需要
  • 什么网站都能打开的浏览器同城小程序怎么推广
  • 在电脑上怎么做网站网址seo分析
  • 石家庄做网站网络公司电子商务营销推广
  • 网站开发 前端专做婚礼logo的网站
  • 同创企业网站建设拖拽建设网站源码
  • wordpress调用网站标题网站页面排版
  • 哈尔滨营销网站建设电子商城网站开发要多少钱
  • 免费织梦导航网站模板下载地址自己建站网站
  • 获取网站访客qq号码代码做抽奖网站违法吗
  • 湖南大型网站建设公司排名偷网站源码直接建站
  • 网站建设周期规划北京网站设计必看刻
  • 如何做自己的在线作品网站深圳网站设计公司的
  • 网站开发外包公司wordpress最简单模板
  • 湖南省建设人力资源网站wordpress主机pfthost
  • 淮安软件园哪家做网站各网站特点
  • 网站长尾关键词排名软件重庆荣昌网站建设
  • 建个商城网站多少钱茂名专业网站建设