Windows串口异步——I/O完成端口

一、代码实例

根据不同的重叠结构体,来判定是写异步操作还是读取数据的异步操作。

下面这一段代码开启了两个线程:
1、一个是I/O完成端口线程,当读取异步通讯接口有数据时候就会进入函数内部,然后执行相关代码(包括退出线程部分)。
2、一个是WaitCommEvent() 一般情况下调用这个函数会立刻因为同步问题,把UI线程卡死,这样会导致GUI界面卡死,必须采用异步的方式,然后开个线程,有数据时候,调用ReadFile() 进行异步操作。接收到的数据长度由I/O完成端口判定。

主程序开启两个线程后,睡眠几十秒然后调用PostQueuedCompletionStatus() 发送消息让GetQueuedCompletionStatus()

// ConsoleApplication3.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <Windows.h>
#include "serial.h"
#include "UpdateDataOrg.h"
#include <time.h>

using namespace std;

unsigned char I_u8SendBuffer[1024];
unsigned char I_u8RecvBuffer[1024];
DWORD I_iTxLength; //发送长度
DWORD I_iRxLength; //接收长度
BOOL I_bRunning = TRUE;

HANDLE I_hComPort;
HANDLE I_hCicp;
OVERLAPPED osWrite, osRead;

DWORD WINAPI WriteThreadProc(_In_ LPVOID lpParameter)
{
   
	BOOL bRet;
	memset(&osWrite, 0, sizeof(OVERLAPPED));

	//创建什么??
	while (I_bRunning)
	{
   
		I_iTxLength = OrgSwitchData(1, I_u8SendBuffer);
		bRet = WriteFile(I_hComPort, I_u8SendBuffer, I_iTxLength, NULL, &osWrite);
		Sleep(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值