overlapped-io

    1热度

    1回答

    我最近一直在做串行通信,所以我准备了一个类,它是所有那些负责读取,写入等的Windows API函数的简单接口。所有I/O操作这个类内部是异步处理的。 在我回到我的问题之前,让我告诉你如何从串口写入和读取数据(这只是读取功能,因为写入的结构完全一样,所以没有意义两个都)。 function TSerialPort.Read(var pBuffer; const lBufferSize: Cardi

    7热度

    6回答

    我在Windows中的大多数日常编程工作都是围绕各种类型的I/O操作(管道,控制台,文件,套接字等)工作。我很清楚从不同类型的句柄(同步,异步等待事件完成,等待文件句柄,I/O完成端口和可警告的I/O)读取和写入的不同方法。我们使用其中的许多。 对于我们的一些应用程序来说,只有一种方法来处理所有的手柄将是非常有用的。我的意思是,程序可能不知道,它收到了什么样的处理,我们想用,比方说,I/O完成端口

    2热度

    2回答

    我目前正在使用IO完成端口基于命名管道的IPC机制。 不幸的是,我有一些msdn文档的麻烦,因为我很不清楚在哪些情况下调用ReadFile/WriteFile导致完成数据包。 用ERROR_IO_PENDING返回FALSE的情况很明显,但是当返回ERROR_MORE_DATA时显然可能出现这种情况呢?在这种情况下是否会有完成数据包?而且,如果返回其他错误呢? 在哪些情况下我必须直接处理结果和释放

    3热度

    1回答

    当使用异步I/O(或Win32术语中的“重叠”I/O)时,我们需要处理OVERLAPPED结构及其hEvent成员。如果I/O函数会延迟读取或写入操作,我们将得到一个ERROR_IO_PENDING错误代码,然后我们将等待异步操作完成WaitForXxxEvent函数,然后我们将调用GetOverlappedResult。但是,如果I/O操作立即完成,我们将不会得到ERROR_IO_PENDING

    9热度

    2回答

    我需要找到一种方式,当以异步模式打开的System.IO.Pipe.NamedPipeServerStream具有更多可读取的数据时 - WaitHandle将是理想的。我不能简单地使用BeginRead()来获得这样的句柄,因为可能会由另一个想要写入管道的线程发出信号 - 所以我必须释放管道上的锁并等待写入完成,和NamedPipeServerStream没有一个CancelAsync方法。我也

    0热度

    1回答

    我有一个快速和肮脏的概念应用程序证明,我在C#中编写,它从网络读取高数据速率多播UDP数据包。由于各种原因,完整的实现将用C++编写,我正在考虑使用boost asio。 C#版本使用一个线程来使用阻塞读取来接收数据。如果计算机负载过重(通常是在另一个线程中处理这些数据包),我在丢弃数据包时遇到了一些问题。 我想知道的是,如果在boost中使用async read操作(在Windows中使用重叠i

    0热度

    2回答

    我在我的代码中遇到了一个错误,它在重叠套接字上使用WSARecv和WSAGetOverlapped结果。在负载很重的情况下,WSAGetOverlapped会返回WSASYSCALLFAILURE('系统调用永远不会失败'),并且我的TCP流在之后不同步,从而导致我的程序上层发生混乱。 到目前为止,我还没有能够将它隔离到给定的一组硬件或驱动程序。有人也遇到了这个问题,并找到了解决方案或解决方法?

    1热度

    2回答

    全部: 我在写日志解决方案。其中一个可用的日志端点是一个文本文件。假设我想从多个进程写入该文件:我可以打开它共享的文件,并使用命名的互斥体来控制并发访问文件(假设所有访问都发生在同一台机器上)。但后来我开始怀疑异步IO。在一个进程中,我可以使用BeginWrite异步发布我的写入。跨进程或跨机器问题呢?在这些情况下,异步IO是否安全? (假定当我调用BeginWrite(),我通过缓冲区包含应该在