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

网站开发与优化课程总结深圳建设一个网站制作公司

网站开发与优化课程总结,深圳建设一个网站制作公司,今天足球比赛推荐,瑞昌建站公司std::move() C11的标准库 提供了一个非常有用的函数 std::move()#xff0c;std::move() 函数将一个左值强制转化为右值引用#xff0c;以用于移动语义。 就是说 std::move(str); 之后原来的值因为变成了右值失效了 但是这样赋值可以避免出现拷贝 #include iostream11的标准库 提供了一个非常有用的函数 std::move()std::move() 函数将一个左值强制转化为右值引用以用于移动语义。 就是说 std::move(str); 之后原来的值因为变成了右值失效了 但是这样赋值可以避免出现拷贝 #include iostream #include string #include vector using namespace std;int main() {string str hello;cout before str: str endl;vectorstring vstr;vstr.emplace_back(std::move(str));cout after str: str endl;return 0; }str 就没有了因为被转移语义了 #include iostream #include functional #include utility #include tinyNetWorkLib.h class People{using actionEvent std::functionvoid();public:People():value(2){}People(int v):value(v){}void setCryEvent(actionEvent func){ cry std::move(func); }void setSimleEvent(actionEvent func){ smile std::move(func);}void handleEvent(Timestamp receiverTime){if(value 0){smile(); coutreceiverTime.toFormattedString()endl;}else{cry();coutreceiverTime.toFormattedString()endl;}} private:actionEvent cry;actionEvent smile;int value; }; int main() {std::functionvoid() func []{std:: couthappystd::endl; };std::functionvoid() func2 []{std::coutcrystd::endl;};People peo;peo.setCryEvent(func2);peo.setSimleEvent(func);peo.handleEvent(Timestamp ::now());// std::cout Hello world std::endl;return 0; } 执行结果 happy 2023/08/27 20:49:59 这里函数指针还能用,因为这里转移语义的对象是参数 给出依赖文件的代码Timestamp 复制下来用就好 记得给个#ifndef这里自己 #include functional #include set #include sys/time.h #include sys/eventfd.h #include fcntl.h #include unistd.h #include mutex #includeunordered_map using namespace std; class Timestamp { public:Timestamp(): microSecondsSinceEpoch_(0){}explicit Timestamp(int64_t microSecondsSinceEpoch): microSecondsSinceEpoch_(microSecondsSinceEpoch){}// 获取当前时间戳static Timestamp now();//用std::string形式返回,格式[millisec].[microsec]std::string toString() const;//格式, %4d年%02d月%02d日 星期%d %02d:%02d:%02d.%06d,时分秒.微秒std::string toFormattedString(bool showMicroseconds false) const;//返回当前时间戳的微妙int64_t microSecondsSinceEpoch() const { return microSecondsSinceEpoch_; }//返回当前时间戳的秒数time_t secondsSinceEpoch() const{ return static_casttime_t(microSecondsSinceEpoch_ / kMicroSecondsPerSecond); }// 失效的时间戳返回一个值为0的Timestampstatic Timestamp invalid(){return Timestamp();}// 1秒1000*1000微妙static const int kMicroSecondsPerSecond 1000 * 1000;private:// 表示时间戳的微秒数(自epoch开始经历的微妙数)int64_t microSecondsSinceEpoch_; };/*** 定时器需要比较时间戳因此需要重载运算符*/ inline bool operator(Timestamp lhs, Timestamp rhs) {return lhs.microSecondsSinceEpoch() rhs.microSecondsSinceEpoch(); }inline bool operator(Timestamp lhs, Timestamp rhs) {return lhs.microSecondsSinceEpoch() rhs.microSecondsSinceEpoch(); }// 如果是重复定时任务就会对此时间戳进行增加。 inline Timestamp addTime(Timestamp timestamp, double seconds) {// 将延时的秒数转换为微妙int64_t delta static_castint64_t(seconds * Timestamp::kMicroSecondsPerSecond);// 返回新增时后的时间戳return Timestamp(timestamp.microSecondsSinceEpoch() delta); }Timestamp Timestamp::now() {struct timeval tv;// 获取微妙和秒// 在x86-64平台gettimeofday()已不是系统调用,不会陷入内核, 多次调用不会有性能损失.gettimeofday(tv, NULL);int64_t seconds tv.tv_sec;// 转换为微妙return Timestamp(seconds * kMicroSecondsPerSecond tv.tv_usec); }// 2022/08/26 16:29:10 // 20220826 16:29:10.773804 std::string Timestamp::toFormattedString(bool showMicroseconds) const {char buf[64] {0};time_t seconds static_casttime_t(microSecondsSinceEpoch_ / kMicroSecondsPerSecond);// 使用localtime函数将秒数格式化成日历时间tm *tm_time localtime(seconds);if (showMicroseconds){int microseconds static_castint(microSecondsSinceEpoch_ % kMicroSecondsPerSecond);snprintf(buf, sizeof(buf), %4d/%02d/%02d %02d:%02d:%02d.%06d,tm_time-tm_year 1900,tm_time-tm_mon 1,tm_time-tm_mday,tm_time-tm_hour,tm_time-tm_min,tm_time-tm_sec,microseconds);}else{snprintf(buf, sizeof(buf), %4d/%02d/%02d %02d:%02d:%02d,tm_time-tm_year 1900,tm_time-tm_mon 1,tm_time-tm_mday,tm_time-tm_hour,tm_time-tm_min,tm_time-tm_sec);}return buf; } 最后我们给出要给第一个版本的channel 一个文件描述符,发生读事件 写时间 关闭事件 错误事 文件描述符就是一个整形变量 int revents 表示这个文件描述符的心情(状态) 通过位运算表示 和EPOLLINT OUT HUB 先不管 #include functional #include tinyNetWorkLib.h #include sys/epoll.hclass Channel{using EventCallback std::functionvoid();using ReadEventCallback std::functionvoid(Timestamp); public: Channel(int fd):fd_(fd){};void setReadCallback(ReadEventCallback cb) { readCallback_ std::move(cb); }void setWriteCallback(EventCallback cb) { writeCallback_ std::move(cb); }void setCloseCallback(EventCallback cb) { closeCallback_ std::move(cb); }void setErrorCallback(EventCallback cb) { errorCallback_ std::move(cb); } void set_revents(int revt){ revents revt; }void handleWithGuard(Timestamp receiverTime){if(revents EPOLLHUP !(revents EPOLLIN)){if(closeCallback_){closeCallback_();}}if(revents EPOLLERR){if(errorCallback_){errorCallback_();} }if(revents (EPOLLIN|EPOLLPRI)){if(readCallback_){readCallback_(receiverTime);}}if(revents EPOLLOUT){if(writeCallback_){writeCallback_();}}}private:ReadEventCallback readCallback_;EventCallback writeCallback_;EventCallback closeCallback_;EventCallback errorCallback_;const int fd_;int revents;}; 这个和我们People类设计几乎一样除了设计了一点系统知识 #include iostream #include functional #include utility #include tinyNetWorkLib.h #include Channel.h class People{using actionEvent std::functionvoid();public:People():value(2){}People(int v):value(v){}void setCryEvent(actionEvent func){ cry std::move(func); }void setSimleEvent(actionEvent func){ smile std::move(func);}void handleEvent(Timestamp receiverTime){if(value 0){smile(); coutreceiverTime.toFormattedString()endl;}else{cry();coutreceiverTime.toFormattedString()endl;}}int set_value(int v){value v;} private:actionEvent cry;actionEvent smile;int value; }; int main() {std::functionvoid() func []{std:: couthappystd::endl; };std::functionvoid() func2 []{std::coutcrystd::endl;};// People peo;// peo.setCryEvent(func2);// peo.setSimleEvent(func);// peo.handleEvent(Timestamp ::now());// std::cout Hello world std::endl;// func();Channel chanel(1);chanel.set_revents(EPOLLOUT);chanel.setWriteCallback(func);chanel.handleWithGuard(Timestamp::now());return 0; } 执行结果 happy
http://wiki.neutronadmin.com/news/362158/

相关文章:

  • 如何用ps做网站标识wordpress页面显示什么意思
  • 网站开发过程总结深圳市深企在线技术开发有限公司
  • 做网站用什么配置的笔记本wordpress 站内信
  • wordpress站点链接打不开网址杭州滨江区建设局网站
  • 如何做网站框架柯城网站建设
  • 毕业设计网站开发的中期报告郑州男科医院哪家治疗比较好
  • 河北邯郸网站制作宁波网站推广怎么做
  • 网站开发失败原因分析百度一下网页版浏览器
  • 做网站需要关注哪些重要问题佛山 网络推广
  • 自学网站官网wordpress修改主题页面
  • 网站建设存在的问题及建议如何做好营销型网站建设
  • 怎么给网站做推广天津个人网站建设
  • 网站工信部不备案吗中国芯片三巨头
  • 做网站属于程序员吗上海比较有名的大公司有哪些
  • 外贸公司的网站怎么做孝感市门户网站
  • 对网站建设的讲话二级注册建造师信息查询官网入口
  • 网站建设兼职在哪找南通做外贸网站
  • 上海建设银行青浦分行网站wordpress 搜索 自定义字段
  • 广州建网站的公司wordpress更新要ftp
  • 黄浦网站建设推广大连网络营销公司有哪些
  • 为学校网站建设wordpress建站环境搭建
  • p站关键词排名桂林 网
  • 江苏城市建设职业学院网站个人或主题网站建设实验报告
  • 国内漂亮大气的网站做网站的软件项目进度计划
  • c2c模式有哪些电商平台上海网站排名优化怎么做
  • 十堰哪里有做网站的企业做网站用什么建站系统
  • 免费网站建设自带后台管理程序网站开发 语言
  • 网站建设跟网站开发有什么区别吗数据调查的权威网站
  • 网络教学平台昆明理工大学企业网站seo优
  • 新兴街做网站公司建设网站需要什么步骤