使用WriteFile以OVERLAPPED方式向串口写数据,如何知道当前实际发送了多少字节?

「已注销」 2017-01-19 12:41:56
大家好,请教一个问题,在使用WriteFile以OVERLAPPED方式向串口写数据,如何知道当前实际发送了多少字节?
比如,我要向串口发送2M的数据,WriteFile 一下就把2M这个长度的数据写进去了,可是发送要很长时间,怎么知道当前已经发送了多少数据量? 我需要显示当前发送的数据量。

...全文
641 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
风扬絮 2017-03-13
  • 打赏
  • 举报
回复
BOOL WINAPI ClearCommError( _In_ HANDLE hFile, _Out_opt_ LPDWORD lpErrors, _Out_opt_ LPCOMSTAT lpStat ); lpStat [out, optional] A pointer to a COMSTAT structure in which the device's status information is returned. If this parameter is NULL, no status information is returned. typedef struct _COMSTAT { DWORD fCtsHold :1; DWORD fDsrHold :1; DWORD fRlsdHold :1; DWORD fXoffHold :1; DWORD fXoffSent :1; DWORD fEof :1; DWORD fTxim :1; DWORD fReserved :25; DWORD cbInQue; DWORD cbOutQue;//The number of bytes of user data remaining to be transmitted for all write operations. This value will be zero for a nonoverlapped write. } COMSTAT, *LPCOMSTAT;
「已注销」 2017-01-19
  • 打赏
  • 举报
回复
谢谢 of123! 试了一下,GetOverlappedResult确实也只能得到发送完成后的数据量,没法得到当前正在发送时发送了多少BYTE的数据。 实在不行,只能像你说的那样,改用多包发送了。
of123 2017-01-19
  • 打赏
  • 举报
回复
上面说的不完全对。 当你使用 OVERLAPPED 方式调用 WriteFile 时,函数会立刻以 FALSE 返回。此时调用 GetLastError 函数,返回 ERROR_IO_PENDING。 此后,你可以调用 GetOverlappedResult 函数取回当前 I/O 状态。

BOOL WINAPI GetOverlappedResult(
  _In_  HANDLE       hFile,
  _In_  LPOVERLAPPED lpOverlapped,
  _Out_ LPDWORD      lpNumberOfBytesTransferred,  //注意这里
  _In_  BOOL         bWait
);
of123 2017-01-19
  • 打赏
  • 举报
回复
这样是无法知道的,除非你使用另外的工具软件对通讯端口监控。不妨改成分多包发送,这样函数返回时就知道当前包发送完成了。

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧