// ThreadTest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "boost/thread.hpp"
#include "boost/shared_ptr.hpp"
#include "boost/asio.hpp"
#include "boost/bind.hpp"
#include <thread>
#include <windows.h>
typedef boost::shared_ptr<boost::asio::io_service> __io_service;
typedef boost::shared_ptr<boost::asio::ip::tcp::acceptor> __acceper;
typedef boost::asio::ip::tcp::endpoint __tcp_ep;
typedef boost::asio::ip::address_v4 __boost_addr_v4;
typedef boost::asio::ip::tcp::socket __tcp_skt;
__io_service _g_io_svr;
__acceper _g_acpter;
int PostAccept(int cnt = 1);
int WorkThread(int threadCont = 4)
{
if (!_g_io_svr){
return -1;
}
auto func = []()
{
printf("thread launched...\n");
boost::system::error_code ec;
_g_io_svr->run(ec);
if (ec != 0){
printf("io_service quit error.\n");
return;
}
};
for (size_t i = 0; i < (size_t)threadCont; i++)
{
boost::thread th(func);
}
return 0;
}
int Init(int threadCont = 4)
{
if (!_g_io_svr){
_g_io_svr = __io_service(new boost::asio::io_service(threadCont));
if (!_g_io_svr){
return -1;
}
}
if (!_g_io_svr){
return -1;
}
__tcp_ep ep(__boost_addr_v4::from_string("192.168.1.78"), 8888);
_g_acpter = __acceper(new boost::asio::ip::tcp::acceptor(*_g_io_svr, ep, true));
if (!_g_acpter){
return -1;
}
if (PostAccept()){
return -1;
}
return WorkThread(threadCont);
}
int _g_cnt = 0;
void AcceptHandler(__tcp_skt* socket, boost::system::error_code error)
{
PostAccept();
socket->close();
delete socket;
printf("%3d socket connect...\n", ++_g_cnt);
}
int PostAccept(int cnt)
{
__tcp_skt* skt = new(std::nothrow) __tcp_skt(*_g_io_svr);
if (!skt){
return -1;
}
_g_acpter->async_accept(*skt,
boost::bind(AcceptHandler, skt, _1));
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
if (Init() != 0){
printf("init failed.\n");
}
printf("server run!.\n");
system("pause");
return 0;
}