- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
有没有什么方法可以在不创建新线程的情况下使用 APC 完成例程异步读取和写入控制台?就像命名管道一样。
问题是在控制台的情况下,FILE_FLAG_OVERLAPPED
被 CreateFile
函数忽略。
编辑。这是为了澄清,我想做什么。Windows 提供函数 ReadFileEx
和 WriteFileEx
来处理 Asynchronous Procedure Calls .这些函数的文档说明了参数 hFile
:
This parameter can be any handle opened with the FILE_FLAG_OVERLAPPED flag by the CreateFile function<...>
然后,CreateFile
的文档说,如果将 CONIN$
或 CONOUT&
传递给它们,则 FILE_FLAG_OVERLAPPED
是忽略。
确实,当我尝试执行以下顺序时:
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
if(!WriteFileEx(h, ...)) {
auto errorCode = GetLastError(); //I get 6 here
}
...我收到错误代码 6 - ERROR_INVALID_HANDLE
。如果使用命名管道而不是控制台句柄,一切都会完美无缺。
所以我的问题是是否有某种方法可以使 ReadFileEx
和 WriteFileEx
与控制台句柄一起工作。
最佳答案
Windows 10:
是的。您可以使用 CONIN$
或 CONOUT$
和 FILE_FLAG_OVERLAPPED
标志调用 CreateFile
,一切都会正常工作。
Windows 7:
没有。控制台不支持重叠操作。
如果您有使用 ReadFileEx/WriteFileEx 的现有代码并且不希望重写它,您可以将命名管道句柄传递给它并让另一个线程(或进程)在命名管道的另一端和实际进程之间传递数据安慰。性能不是问题,因为控制台 I/O 无论如何都很慢,所以涉及一个单独的线程并没有真正的危害。
关于c - Windows 中带有控制台句柄的 ReadFileEx 和 WriteFileEx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44834951/
我使用 IO 完成例程通过管道在不同机器上的两个进程之间进行通信。 有时,当调用 WriteFileEx 的完成例程时,完成例程参数 dwErrorCode 为 0(即无错误),GetOverlapp
我正在尝试编写一个非常简单的 C 程序。由于某种原因,我无法在同一程序中使用 writeFileEx 和 receivevfrom,因为每次调用 writeFileEx 都会导致 receivevfr
我正在尝试使用命名管道和重叠 I/O 将数据从 x64 应用程序传递到 x86 应用程序,就像此处定义的那样: http://msdn.microsoft.com/en-us/library/wind
有没有什么方法可以在不创建新线程的情况下使用 APC 完成例程异步读取和写入控制台?就像命名管道一样。 问题是在控制台的情况下,FILE_FLAG_OVERLAPPED 被 CreateFile 函数
我是一名优秀的程序员,十分优秀!