Boost.Asio object_handle ไม่รอ stdin เมื่อทำการดีบัก

ฉันกำลังพยายามใช้ object_handle ของ Boost.Asio เพื่อรออินพุตจากคอนโซล:

int main()
{
    using namespace boost::asio;

    io_service io;

    windows::object_handle in(io);
    in.assign(::GetStdHandle(STD_INPUT_HANDLE));

    in.wait();

    io.run();
    return 0;
}

สิ่งนี้ใช้ได้หากฉันเรียกใช้จากเทอร์มินัล แต่เมื่อฉันพยายามดีบั๊กด้วย Visual Studio มันจะข้าม wait() เกิดอะไรขึ้น?


person Kietz    schedule 16.07.2014    source แหล่งที่มา
comment
เกี่ยวข้องกันในวงสัมผัส: stackoverflow.com/a/23631715/85371   -  person sehe    schedule 17.07.2014


คำตอบ (1)


แอปพลิเคชันคอนโซล Windows สามารถสร้างคอนโซลของตนเอง หรือสามารถแนบกับคอนโซลที่มีอยู่ได้ (เช่น เชลล์คำสั่งหลัก) นี่อาจเป็นสิ่งที่สร้างความแตกต่าง

คุณสามารถมีอิทธิพลต่อการจัดสรรคอนโซลได้โดยปกติด้วยสิ่งต่าง ๆ เช่น start cmd /c myprog เทียบกับ ``start /b cmd /c myprog` หรือคุณสามารถสร้างคอนโซลของคุณได้อย่างชัดเจน

บทความ MSDN ที่มีภูมิหลังและ API อยู่ที่นี่:

person sehe    schedule 17.07.2014