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

手表哪个网站最好重庆有哪些科技骗子公司

手表哪个网站最好,重庆有哪些科技骗子公司,做官网的步骤,网站 信用卡支付接口C学习6 基础知识std::thread 实战boost domain socket server 基础知识 std::thread std::thread是C11标准库中的一个类&#xff0c;用于创建并发执行的线程。它的详细用法如下&#xff1a; 头文件 #include <thread>创建线程 std::thread t(func, args...);其中&am…

C++学习6

  • 基础知识
    • std::thread
  • 实战
    • boost domain socket server

基础知识

std::thread

std::thread是C++11标准库中的一个类,用于创建并发执行的线程。它的详细用法如下:

  1. 头文件
#include <thread>
  1. 创建线程
std::thread t(func, args...);

其中,func是线程要执行的函数,args是传递给函数的参数。创建线程后,线程会立即开始执行func函数。

  1. 等待线程结束
t.join();

join()函数会阻塞当前线程,直到t线程执行完毕。

  1. 分离线程
t.detach();

detach()函数会将t线程与当前线程分离,使得t线程在后台继续执行,当前线程不再等待t线程执行完毕。

  1. 判断线程是否可执行
if (t.joinable()) {// ...
}

joinable()函数用于判断线程是否可执行,如果线程已经被join()或detach(),则返回false。

  1. 获取线程ID
std::thread::id id = t.get_id();

get_id()函数用于获取线程的ID。

  1. 线程休眠
std::this_thread::sleep_for(std::chrono::milliseconds(ms));

sleep_for()函数用于让当前线程休眠一段时间,ms是休眠的毫秒数。

  1. 线程同步

C++11标准库中提供了多种线程同步的机制,如互斥锁、条件变量、原子操作等。这些机制可以用于保证多个线程之间的数据同步和互斥访问。

实战

boost domain socket server

#include <cstdio>
#include <iostream>
#include <boost/array.hpp>
#include <boost/bind/bind.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/asio.hpp>#if defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)namespace CVpn {
using boost::asio::local::stream_protocol;class UnixSocketSession : public boost::enable_shared_from_this<UnixSocketSession>
{
public:UnixSocketSession(boost::asio::io_context &ioContext,std::function<std::optional<std::string>(std::string &)> msgProc) : socket(ioContext), msgProc(msgProc){}stream_protocol::socket &GetSocket(){return socket;}void Start(){socket.async_read_some(boost::asio::buffer(data), boost::bind(&UnixSocketSession::HandleRead,shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));}void HandleRead(const boost::system::error_code &error, size_t bytes_transferred){if (!error) {// 处理消息std::cout << "UnixSocketSession: HandleRead: ok, data=" << data.data() << std::endl;std::string message(data.data(), bytes_transferred);auto replay = msgProc(message);if (replay.has_value()) { // 返回值非空表示有消息要回复给客户端boost::asio::async_write(socket, boost::asio::buffer(replay.value()),boost::bind(&UnixSocketSession::HandleWrite, shared_from_this(), boost::asio::placeholders::error,boost::asio::placeholders::bytes_transferred));}} else {std::cout << "UnixSocketSession: HandleRead: fail, error:" << error.message() << std::endl;}}void HandleWrite(const boost::system::error_code &error, size_t bytes_transferred){if (!error){std::cout << "UnixSocketSession: HandleWrite: replay ok, bytes=" << bytes_transferred << std::endl;socket.async_read_some(boost::asio::buffer(data),boost::bind(&UnixSocketSession::HandleRead,shared_from_this(),boost::asio::placeholders::error,boost::asio::placeholders::bytes_transferred));} else {std::cout << "UnixSocketSession: HandleWrite: fail, error:" << error.message() << std::endl;}}private:stream_protocol::socket socket; // 用于跟客户端通信的socketstd::function<std::optional<std::string>(std::string &)> msgProc; // 收到客户端消息后的消息处理函数boost::array<char, 1024> data; // 用于保存从客户端接收的数据
};class UnixServer
{
public:UnixServer(boost::asio::io_context &ioContext, const std::string &filePath,std::function<std::optional<std::string>(std::string &)> handler) :ioc(ioContext),acceptor(ioContext, stream_protocol::endpoint(filePath)),workingStatus(STOPPING),msgProc(handler){}void Start(){workingStatus = RUNNING;boost::shared_ptr<UnixSocketSession> newSession(new UnixSocketSession(ioc, msgProc));acceptor.async_accept(newSession->GetSocket(),boost::bind(&UnixServer::HandleAccept, this, newSession, boost::asio::placeholders::error));}void Stop(){workingStatus = STOPPING;acceptor.close();}// 测试接口void TestSetServerStopping(){workingStatus = STOPPING;}void HandleAccept(boost::shared_ptr<UnixSocketSession> newSession,const boost::system::error_code &error){if (!error) {std::cout << "UnixServer: HandleAccept: ok" << std::endl;newSession->Start();} else {std::cout << "UnixServer: HandleAccept: fail, error:" << error.message() << std::endl;}if (workingStatus == RUNNING) {// reset后会将之前的newSession对象的共享计数减一,等该session不再运行后就会自动回收相关资源newSession.reset(new UnixSocketSession(ioc, msgProc));acceptor.async_accept(newSession->GetSocket(),boost::bind(&UnixServer::HandleAccept, this, newSession, boost::asio::placeholders::error));}}private:boost::asio::io_context &ioc;stream_protocol::acceptor acceptor;enum {RUNNING, STOPPING,} workingStatus;// 收到客户端消息后回调用户传入的消息处理函数,如果返回值非空表示有消息要回复给客户端std::function<std::optional<std::string>(std::string &)> msgProc;
};
} // namespace CVpn
#else // defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
# error Local sockets not available on this platform.
#endif // defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
http://www.yayakq.cn/news/496227/

相关文章:

  • 阿里邮箱 网站开发西安今天消息
  • 网络电子商务购物网站黑龙seo网站优化
  • 公司网站怎么建复旦学霸张立勇做的网站
  • 常熟公司网站建设电话深圳国内网站设计公司
  • 网站建设设计广州网线制作过程图片
  • 网站建设公司知乎镇江搜索优化技巧
  • 小型网站开发语言颜色选取网站
  • 移动端h5网站开发框架哪里有网站推广软件
  • 网站策划工资一般多少如何将网站上传到万网主机
  • 公司网站怎么做优化网站建设公司前台
  • 做海报的素材网站苏州电商关键词优化
  • 登录门户网站更改wordpress最大上传文件大小
  • 长沙市城市建设档案馆网站齐齐哈尔铁峰建设局网站
  • 网站建设用什么语言个人营业执照网上注销流程
  • 平面设计网站知乎制作个人网页详细教程
  • 重庆市建设工程信息网站南平购物网站开发设计
  • 网站建设药店局域网内部网站建设app下载
  • wordpress mysql分离深圳百度首页优化
  • 西安市建设工程交易中心网站梦幻西游网页微信版
  • 常州市住房和城乡建设局网站成都网站建设推广在线咨询
  • 小程序开发平台网站推荐建筑类期刊排名
  • 规范网站建设情况的报告有哪些可以做问卷赚钱的网站
  • 卡盟怎么做网站网站建设栏目分析
  • 怎么建立一个个人网站搜索引擎营销的过程
  • 一个网站需要多少网页wordpress淘宝客手机
  • 北京网站sem、seowordpress模板作者怎样去除
  • 电商网站开发工程师物流加盟信息网站
  • 产品设计网站制作微友圈推广平台怎么加入
  • 百度收录率高的网站用心做电影的网站
  • ireal 网站建设中国建设银行招聘信息网站