我做了一个使用boost asio的套接字应用程序,当我尝试从套接字读取任何东西时,似乎需要很多cpu。增强asio在读取100%CPU时
大气压我使用一个包装类,所以我没有暴露在我的头文件看起来是这样的升压头文件:
class SocketHandle
{
public:
SocketHandle()
{
m_pSocket = NULL;
m_pService = NULL;
}
~SocketHandle()
{
delete m_pSocket;
delete m_pService;
}
void connect(const char* host, const char* port)
{
if (m_pSocket || m_pService)
return;
m_pService = new boost::asio::io_service();
tcp::resolver resolver(*m_pService);
tcp::resolver::query query(tcp::v4(), host, port);
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
tcp::resolver::iterator end;
m_pSocket = new tcp::socket(*m_pService);
boost::system::error_code error = boost::asio::error::host_not_found;
while (error && endpoint_iterator != end)
{
(*m_pSocket).close();
(*m_pSocket).connect(*endpoint_iterator++, error);
}
if (error)
throw ...
}
tcp::socket* operator->()
{
return m_pSocket;
}
private:
tcp::socket *m_pSocket;
boost::asio::io_service *m_pService;
};
,然后即时阅读从插座上,像这样:
size_t recv(char *data, size_t size)
{
boost::system::error_code error;
size_t len = (*m_pSocket)->read_some(boost::asio::buffer(data, size), error);
if (error)
throw ...
return len;
}
我做错了什么?有没有更好的方式从套接字读取数据?
升压1.39.0 的Visual C++ 窗口
这是从升压asio例子:P – Lodle 2009-08-24 04:59:10
但问题是读取不是连接代码。 – Lodle 2009-08-24 05:01:27