Uso el boost.asio para implementar la comunicación de red. En el hilo principal, creo el socket TCP y conecto el equipo remoto. Luego, inicie un hilo de trabajo para leer los datos del socket. En el hilo principal, el mismo socket se usa para enviar datos. Eso significa que el mismo socket se usa en dos hilos sin mutex. El código está pegado a continuación. ¿Hay algún problema con respecto a las funciones de lectura y escritura del socket?¿Las funciones de lectura y escritura del socket de refuerzo son seguras?
boost::asio::io_service m_io_service;
boost::asio::ip::tcp::socket m_socket(m_io_service);
boost::thread* m_pReceiveThread;
void Receive();
void Connect()
{
boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address::from_string("127.0.0.1"), 13);
m_socket.connect(endpoint);
m_pReceiveThread = new boost::thread(Receive);
}
void Send()
{
std::wstring strData(L"Message");
boost::system::error_code error;
const std::size_t byteSize = boost::asio::write(m_socket, boost::asio::buffer(strData), error);
}
void Receive()
{
for (;;)
{
boost::array<wchar_t, 128> buf = {0};
boost::system::error_code error;
const std::size_t byteSize = m_socket.read_some(boost::asio::buffer(buf), error);
// Dispatch the received data through event notification.
}
}
int main()
{
Connect();
while(true)
{
boost::this_thread::sleep(boost::posix_time::seconds(1));
Send();
}
return 0;
}
envío y recepción de usos diferentes tampones, por lo que en el bajo nivel que podría estar bien. Sin embargo, los errores se comparten en el nivel bajo, por lo que, por supuesto, se propagarán hasta su uso de Boost en diferentes subprocesos. –