一、代码实例
根据不同的重叠结构体,来判定是写异步操作还是读取数据的异步操作。
下面这一段代码开启了两个线程:
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(