Tôi đang phát triển một vòng lặp máy chủ nhỏ cho một phần mềm lớn hơn nhưng nó không hoạt động như tôi muốn nó làm.Dừng vòng lặp máy chủ luồng bằng cách sử dụng Boost :: Asio
Khi người dùng nhập vào ".quit" Tôi muốn các phần mềm để ngăn chặn vòng lặp này máy chủ ren:
try {
while (true) {
acceptor.accept(socket);
const size_t buffersize = 1024;
char data[buffersize+1] = {0};
data[socket.read_some(boost::asio::buffer(data,buffersize))] = '\0'; // Write data & place terminator
boost::thread asyncWriting(boost::bind(&myClass::writeToFile, this));
socket.close();
}
} catch(const boost::system::system_error& e) {
cout << "Boost System Error: " << e.what() << endl;
}
tôi bắt đầu chủ đề theo cách sau:
serverThread = boost::shared_ptr<boost::thread>(new boost::thread(boost::bind(&myClass::startServer, this)));
Nhưng tôi có vấn đề dừng "máy chủ". Không có vấn đề nếu tôi làm gián đoạn luồng, đóng socket và/hoặc chấp nhận hoặc chỉ phá vỡ các chương trình Boost ném lỗi:
Bad file descriptor
Nó không xảy ra mỗi khi nhưng thường và tôi muốn khắc phục vấn đề đó và không chỉ phớt lờ nó.
Bạn có thể giúp tôi cách tắt tính năng này sạch không?
nó sẽ rất hữu ích nếu bạn có thể đính kèm một debugger và cho chúng tôi biết những ngoại lệ được ném. Có nhiều phương thức asio có thể ném một 'boost :: system :: system_error' bằng một mã lỗi của' boost :: system :: errc :: bad_file_descriptor'. –