boost随笔
来源:互联网 发布:怎么样申请淘宝网店 编辑:程序博客网 时间:2024/06/06 05:20
// 工作对象
boost::asio::io_service::work work( io_service );
work.reset();// 将工作从io_service中删除
// 函数对象
boost::bind( &WorkerThread, io_service )
// 智能指针
shared_ptr<T* t> p(new T);// 使用智能指针去他妹的没关句柄
// 线程
boost::thread thread1( boost::bind( ... ) );
// 线程池
boost::thread_group worker_threads;
worker_threads.create_thread( boost::bind( ... ) );
worker_threads.join_all();
boost::this_thread::get_id();// 取得线程id,不是windows的id
// 锁
boost::mutex global_stream_lock;
global_stream_lock.lock();
global_stream_lock.unlock();
// 睡
boost::this_thread::sleep(boost::posix_time::milliseconds( 1000 ));
// 异常
try{
throw( std::runtime_error( "Oops!" ) );
}catch( std::exception & ex ){
// 输出"Oops!"
std::cout << ex.what() << std::endl;
}
boost::system::error_code ec;
// 叫它服务吧
io_service.run(ec);// 同步执行
io_service.poll();// 异步执行
io_service.stop();// 退出,所有work停止
io_service.dispatch( boost::bind( ... ) );// 实时执行
io_service.post( boost::bind( ... ) );// 迟后执行
// 叫它序列化吧
boost::asio::io_service::strand strand( *io_service );
strand.post( boost::bind( ... ) );// 次序优先执行
io_service->post( strand.wrap( boost::bind( ... ) ) );// 效率优先执行
// 时间
boost::posix_time::ptime pt = boost::posix_time::microsec_clock::local_time();
const boost::posix_time::time_duration delta = pt1 - pt2;
// 定时器
boost::asio::deadline_timer timer( *io_service );
timer.expires_from_now( boost::posix_time::seconds( 5 ) );//boost::posix_time::milliseconds(5000);
timer.async_wait( TimerHandler );
void TimerHandler( const boost::system::error_code & error,
boost::shared_ptr< boost::asio::deadline_timer > timer
)
{
// 用了strand对象不需要加锁
}
timer->async_wait( boost::bind( &TimerHandler, _1, timer ) );// 回调函数的错误码由系统提供,这里第一参数就用占位符代替
timer->cancel(ec)
// 端点
std::string str1;
boost::asio::ip::address addr1 = endpoint.address();
unsigned short port1 = endpoint.port();
str1 = addr1.to_string() + ":" + boost::lexical_cast< std::string >( port1 ) + "\r\n";
// socket
boost::shared_ptr< boost::asio::ip::tcp::socket > sock(
new boost::asio::ip::tcp::socket( *io_service )
);
sock->is_open();
sock->remote_endpoint();
sock->local_endpoint();
// 解析器
boost::asio::ip::tcp::socket sock( *io_service );
boost::asio::ip::tcp::resolver resolver( *io_service );
boost::asio::ip::tcp::resolver::query query(
"www.google.com",
boost::lexical_cast< std::string >( 80 )
);
boost::asio::ip::tcp::resolver::iterator iterator = resolver.resolve( query );
boost::asio::ip::tcp::endpoint endpoint = *iterator;
// 接受器
boost::shared_ptr< boost::asio::ip::tcp::acceptor > acceptor(
new boost::asio::ip::tcp::acceptor( *io_service )
);
// 连接
sock.connect( endpoint );// 同步连接
void OnConnect( const boost::system::error_code & ec,
boost::shared_ptr< boost::asio::ip::tcp::socket > sock )
{
}
sock->async_connect( endpoint, boost::bind( OnConnect, _1, sock ) );// 异步连接
// 接受
boost::shared_ptr< boost::asio::ip::tcp::acceptor > acceptor(
new boost::asio::ip::tcp::acceptor( *io_service )
);
void OnAccept( const boost::system::error_code & ec,
boost::shared_ptr< boost::asio::ip::tcp::socket > sock )
{
...
}
// 跟API编程一样,先绑定后监听最后接受
acceptor->open( endpoint.protocol() );
acceptor->set_option( boost::asio::ip::tcp::acceptor::reuse_address( false ) );
acceptor->bind( endpoint );
acceptor->listen( boost::asio::socket_base::max_connections );
acceptor->async_accept( *sock, boost::bind( OnAccept, _1, sock ) );
...
//acceptor->cancel( ec );
acceptor->close( ec );
// 断开
boost::system::error_code ec;
sock.shutdown( boost::asio::ip::tcp::socket::shutdown_both, ec );
sock.close( ec );
- boost随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- Eclipse连接MySQL数据库
- 传值,自己留用
- 可变参数va_start,va_arg,va_end的用法
- 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)的比较
- PHP的GD函数库图形类函数(创建缩略图、给图片加水印、给图片加文字、画布划线)
- boost随笔
- C++语言中的元类编程(一)
- [HOJ]1632、[POJ]1251 Jungle Roads、c++/Java解决
- 个人理财有哪些基本原理和方法?
- 【python系列】python中的sum函数.sum(axis=1)
- 解决X64操作系统PL/SQL连接报错问题 make sure you have the 32 bits oracle client installed .
- 无法定位程序输入点_invalid_parameter_noinfo_noreturn于动态链接库 MSVCR100.dll上
- android 4.0 屏蔽home键实现
- jquery 确认提示框