Trong một ứng dụng đồ họa, tôi thực hiện các lệnh gỡ rối bằng cách sử dụng đầu vào của giao diện điều khiển. Khi giao diện điều khiển được tạo ra một luồng mới cũng được tạo ra để thu thập các lệnh của người dùng xử lý tất cả các đầu vào đó, ứng dụng đồ họa tiếp tục chạy song song. Tôi sử dụng boost :: thread library.Có thể dừng cin khỏi đầu vào chờ không?
Nó hoạt động tốt cho đến nay, tuy nhiên tôi đã không tìm thấy một giải pháp tốt đẹp để ngăn chặn việc thực hiện chủ đề này. Các chủ đề luôn luôn chờ đợi một người dùng nhập vào:
while(appRunning)
{
std::cin>>theUserCommand;
// ...do stuff
}
Sau đó, khi các ứng dụng đồ họa kết thúc, nó sẽ ngừng tất cả các chức năng điều khiển, trong đó tôi bao gồm các chủ đề:
appRunning = false;
// do some more related clean up
myListeningThread->join();
Như bạn có thể thấy std :: cin sẽ đợi đầu vào của người dùng, sau khi kết nối đã được gọi. Một trong những giải pháp mà tôi đã thử là tạo sự kiện "tổ hợp phím", std :: cin sẽ nhận được bất kỳ giá trị nào bạn gửi với ENTER, chuỗi sẽ kết thúc độc đáo, giải pháp này thật khủng khiếp và tôi không muốn giữ nó . Bên cạnh đó, nó đã làm việc trong một trong các môi trường công cụ được thực hiện, nhưng không thành công khi tôi đã thử sử dụng nó cùng với một API UI. Các bạn có thể hướng dẫn tôi cách tôi có thể sửa lỗi này theo cách chính xác không? Có thể không thực sự nói chắc chắn nếu trong tài liệu C++ có một chức năng để ngăn chặn std :: cin chờ đợi cho người dùng đầu vào, và chỉ và tiếp tục thực hiện chương trình, là nó thậm chí có thể?
EDIT: Tốt Tôi thấy rằng keybd_event là một chút gây hiểu nhầm cho một số môi trường, rõ ràng xác định xử lý đầu vào với WriteConsoleInput hoạt động tốt.
Có một số khả năng, nhưng tất cả đều phụ thuộc vào hệ điều hành. Chương trình này dành cho hệ điều hành nào? – zwol
Win/VStudio9.0, tôi đã sử dụng keybd_event cho giải pháp mà tôi đã đề cập, không có vấn đề gì nếu nó phụ thuộc vào hệ điều hành. bạn đề nghị tôi sửa nó như thế nào? – notNullGothik
BTW, SetConsoleCtrlHandler không thực sự làm việc cho tôi, điều này sẽ kết thúc quá trình ứng dụng bỏ qua tất cả việc dọn dẹp cho ứng dụng kết thúc. – notNullGothik