邹小帛,腹黑市长滚远点,齐天大圣异界行下载
例子:模仿建立数据库的连接,只有在放生send_data或者receive_data的时候,才去连接数据库,并且只连接了一次。即使,既调用了send_data也调用了receive_data,但是open_connection只被执行了一次,也就是说数据库的连接只建立一次就够了,不管你是要接收,还是要发送。
#include <mutex> #include <thread> #include <iostream> class x{ int connect_detail; std::once_flag connect_init_flag; void open_connection(){ std::cout << "open:" << connect_detail << std::endl; //open(); } public: x(int detail):connect_detail(detail){} void send_data(){ std::call_once(connect_init_flag, &x::open_connection, this); //send(); } void receive_data(){ std::call_once(connect_init_flag, &x::open_connection, this); //receive(); } }; int main(){ x x(10); x.send_data(); x.receive_data(); }
执行结果:只打印出一次“open:10”。
结果分析:虽然即调用了send_data,也调用了receive_data,但是open_connection只被执行了一次。
std::call_once(connect_init_flag, &x::open_connection, this);
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
如何在没有core文件的情况下用dmesg+addr2line定位段错误
用QT制作3D点云显示器——QtDataVisualization
网友评论