设备对象 是可同步的内核对象, 这意味着我们可以调用WaitForSingleObject, 并传入文件句柄, 套接字, 通信端口,等等. 当系统执行异步I/O的时候, 设备对象处于未触发状态, 一旦操作完成, 系统会将对象改变成触发状态, 这样线程就知道操作已经完成了, 这时线程就可以继续执行了.
线程要以调用WaitForInputIdle函数来将自己挂起:
DWORD WaitForInputIdle(HANDLE hProcess, DWORD dwMilliseconds);
这个函数会等待由hProcess标识的进程,直到创建应用程序第一窗口的线程中没有待处理的输入为止. 这个函数对父进程 来说比较有用. 父进程可以创建一个子进程来完成 一些工作. 当父进程 调用CreateProcess的时候, 父进程可以一边继续执行, 一边让子进程进行初始化. 父进程可能需要得到子进程创建的窗口的句柄. 父进程能够知道子进程已经初始化完毕的唯一方法, 就是等待子进程, 直到它不再处理任何输入为止. 因此, 在调用CreateProcess之后 , 父进程可以调用WaitForInputIdle();
当我们需要强制在应用程序中输入一些按键的时候, 也可以使用WaitForInputIdle.