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

企业网站如何做网警备案做任务的电脑网站

企业网站如何做网警备案,做任务的电脑网站,wordpress 登录验证,网站百度统计表格怎么做概述 封装代码仓库#xff1a; https://gitee.com/liudegui/my_thread 尝试封装一个基于C11的多线程控制与调度类#xff0c;适配QNX和Linux平台#xff0c;且代码符合Misra标准。它提供了以下主要功能#xff1a; 线程的创建与销毁管理。线程的优先级调度。线程的CPU亲…概述 封装代码仓库 https://gitee.com/liudegui/my_thread 尝试封装一个基于C11的多线程控制与调度类适配QNX和Linux平台且代码符合Misra标准。它提供了以下主要功能 线程的创建与销毁管理。线程的优先级调度。线程的CPU亲和性设置。线程的等待与唤醒机制。 类的结构及主要成员函数如下 构造函数与析构函数负责初始化线程相关参数并在析构时确保线程安全退出。thread_start()启动线程创建指定数量的线程实例。thread_shutdown()关闭线程释放资源并等待所有线程退出。timed_wait()线程的超时等待机制防止线程无限等待。set_self_thread_priority()设置当前线程的优先级。 实现细节 MyThread类内部实现主要涉及以下几个方面 使用std::thread来创建线程实例。利用std::mutex和std::condition_variable来实现线程同步。使用pthread库来设置线程的优先级和CPU亲和性。 /** * my_thread.h */#ifndef UTILS_MY_THREAD_H_ #define UTILS_MY_THREAD_H_#include atomic #include cstdint #include functional #include mutex #include string #include thread #include vector #include condition_variable #include memorynamespace MyTest { class MyThread {public:explicit MyThread(const std::string in_name, int32_t in_priority, uint32_t in_worker_num,const std::functionvoid() in_func, int32_t in_cpusetsize, const cpu_set_t*const in_cpuset);~MyThread();void thread_start();void thread_shutdown();bool has_shutdown() const {return is_shutdown_;}void timed_wait(uint32_t useconds);static void set_self_thread_priority(int32_t in_priority);private:static void my_thread_func_(MyThread* thread_ins);private:std::string thread_name_;int32_t thread_priority_;uint32_t thread_worker_num_;std::vectorstd::shared_ptrstd::thread my_threads_;std::functionvoid() func_main_;int32_t thread_cpusetsize_;const cpu_set_t* thread_cpuset_ nullptr;std::mutex thread_mutex_;std::condition_variable thread_cond_;bool is_shutdown_; };} // namespace MyTest#endif // UTILS_MY_THREAD_H_/** * my_thread.cpp */#include my_thread.h#include ctime #include sstream #ifndef _QNX_ #include sys/syscall.h #endif #include sys/types.h #include fake_log.hnamespace MyTest {MyThread::MyThread(const std::string in_name, int32_t in_priority, uint32_t in_worker_num,const std::functionvoid() in_func, int32_t in_cpusetsize, const cpu_set_t* const in_cpuset): thread_name_(in_name),thread_priority_(in_priority),thread_worker_num_(in_worker_num),func_main_(in_func),thread_cpusetsize_(in_cpusetsize),thread_cpuset_(in_cpuset),is_shutdown_(true) { }MyThread::~MyThread() {if (!is_shutdown_) {thread_shutdown();} }void MyThread::my_thread_func_(MyThread* thread_ins) {if (thread_ins nullptr) {MY_LOG_ERROR(thread_ins is nullptr);} else { #ifndef _QNX_if ((thread_ins-thread_cpuset_ ! nullptr) (thread_ins-thread_cpusetsize_ 0)) {const pthread_t tid pthread_self();const auto np_return pthread_setaffinity_np(tid, static_castsize_t(thread_ins-thread_cpusetsize_), thread_ins-thread_cpuset_);if (np_return ! 0) {MY_LOG_ERROR(pthread_setaffinity_np failed. return%d, np_return);}} #else// qnx ... #endifstd::stringstream thread_id_stream;thread_id_stream std::this_thread::get_id();MY_LOG_INFO(thread %s starts. pid%s target_priority%d, thread_ins-thread_name_.c_str(),thread_id_stream.str().c_str(), thread_ins-thread_priority_);MyThread::set_self_thread_priority(thread_ins-thread_priority_);try {thread_ins-func_main_();} catch (...) {MY_LOG_ERROR(Exception occurred in thread %s, thread_ins-thread_name_.c_str());}} }void MyThread::thread_start() {std::lock_guardstd::mutex lck(thread_mutex_);is_shutdown_ false;my_threads_.resize(thread_worker_num_);uint32_t thread_idx 0;for (; thread_idx thread_worker_num_; thread_idx) {my_threads_[thread_idx] std::make_sharedstd::thread(my_thread_func_, this);} }void MyThread::thread_shutdown() {std::lock_guardstd::mutex lck(thread_mutex_);if (!is_shutdown_) {is_shutdown_ true;thread_cond_.notify_all();for (const auto my_t : my_threads_) {if (my_t-joinable()) {my_t-join();}}} }void MyThread::timed_wait(uint32_t useconds) {std::unique_lockstd::mutex lck(thread_mutex_);const auto timeout_val std::chrono::microseconds(useconds);do {const auto return_val thread_cond_.wait_for(lck, timeout_val);if (return_val std::cv_status::timeout) {MY_LOG_ERROR(thread timed_wait timeout);}} while (false); }void MyThread::set_self_thread_priority(int32_t in_priority) {bool go_on true;struct sched_param params;struct sched_param current_params;int32_t set_policy{0};int32_t current_policy{0};const pthread_t this_thread pthread_self();int32_t status_ret pthread_getschedparam(this_thread, current_policy, current_params);if (status_ret ! 0) {MY_LOG_ERROR(getschedparam %d, status_ret);go_on false;} else {MY_LOG_DEBUG(thread current priority is %d (%d), target is %d, current_params.sched_priority, current_policy,in_priority); // MY_LOG_TRACEif (in_priority 0) {go_on false;} else if (in_priority 0) {set_policy SCHED_FIFO;params.sched_priority current_params.sched_priority in_priority;} else {set_policy SCHED_IDLE;params.sched_priority 0;}}if (go_on) {if (params.sched_priority 99) {params.sched_priority 99;}if (params.sched_priority 0) {params.sched_priority 0;}status_ret pthread_setschedparam(this_thread, set_policy, params);if (status_ret ! 0) {MY_LOG_WARN(setschedparam(%d), params.sched_priority);go_on false;}}if (go_on) {status_ret pthread_getschedparam(this_thread, current_policy, current_params);if (status_ret ! 0) {MY_LOG_ERROR(getschedparam 2 %d, status_ret);} else {if (current_params.sched_priority ! params.sched_priority) {MY_LOG_ERROR(current priority%d (%d), target is %d, current_params.sched_priority, current_policy,params.sched_priority);} else {MY_LOG_INFO(set thread priority to %d (%d), current_params.sched_priority, current_policy);}}} }} // namespace MyTest测试代码 #include my_thread.h#include chrono #include iostream #include stringnamespace MyTest { static void worker_function() {std::this_thread::sleep_for(std::chrono::milliseconds(100));std::cout Thread ID: std::this_thread::get_id() is working. std::endl; } } // namespace MyTestint32_t main() {int32_t main_res{0};try {const uint32_t num_threads 4;cpu_set_t cpuset1;CPU_ZERO(cpuset1);CPU_SET(0, cpuset1);std::vectorstd::shared_ptrMyTest::MyThread test_threads;uint32_t thread_idx 0;for (; thread_idx num_threads; thread_idx) {const std::string thread_name1 std::string(Thread_) std::to_string(thread_idx);const std::shared_ptrMyTest::MyThread my_t std::make_sharedMyTest::MyThread(thread_name1, 1, 1, MyTest::worker_function, sizeof(cpuset1), cpuset1);test_threads.push_back(my_t);}for (const auto my_t : test_threads) {my_t-thread_start();}std::this_thread::sleep_for(std::chrono::seconds(2));for (const auto my_t : test_threads) {my_t-thread_shutdown();}for (const auto my_t : test_threads) {while (!my_t-has_shutdown()) {// std::this_thread::yield();my_t-timed_wait(100);}}std::cout All threads have been shutdown. std::endl;} catch (...) {std::cerr Exception occurred std::endl;main_res 1;}return main_res; }
http://www.eeditor.cn/news/123082/

相关文章:

  • 图库素材网站模板丽水网站建设哪家好
  • seo助力网站转化率提升物流网络图
  • html网站地图生成php企业网站
  • 网站建设的需求方案品牌宣传推广文案
  • p2p种子网站建设建设网站用动态ip还是静态ip
  • html网站设计实验报告wordpress鼠标滑过几何线条
  • 做网站推广利润哪个国家的绘本网站做的好
  • 网站直接访问建设部网站法律法规
  • 做铝材的网站农业电商网站有哪些
  • 100款免费软件网站大全wordpress如何做页面模板下载地址
  • 品牌网站怎么建立自己怎么建设手机网站
  • 怎样做网站手机客户端帮别人起名 做ppt的网站
  • 网站模板 整站源码友谊平台
  • 寻找扬中网站建设wordpress不显示作者评论
  • 好的培训网站模板wordpress pot文件
  • 做网站小代码大全自助网站建设公司电话
  • 诸暨北京有哪些网站制作公司列表网网站建设
  • 我做的网站怎样被百度收录微信开发一个小程序多少钱
  • 什么行业必须做网站郑州网站建设 天强科技
  • 泰州做网站的个人建设网站教程
  • 网页设计与网站建设 pdf深圳食品网站建设
  • 网站怎么更换页面图片杭州品牌策划
  • 如何知道网站是用什么语言做的浙江省住建和城乡建设厅官方网站
  • 苏州高校网站建设建议南京的电商网站设计
  • 做搜狗pc网站点平面设计网课哪个机构好
  • 建设公司网站大概需要多少钱?江苏财经职业技术学院会计系示范校建设专题网站
  • 专业做网站app的公司西安建网站
  • 查pv uv的网站加强政协网站建设
  • 网站开发的步骤过程帝国cms怎么做网站
  • 广州市网站建设怎么样无锡做网站专业的公司