ReadFile(myhModem,RecBuf,Rec_num,&len,0);// 清 除 接 收 缓 冲 区
ReadFile(myhModem,RecBuf,7,&len,0);
WriteFile(myhModem,"Received",8,&len,0);
pwin- >MessageBox(RecBuf,0,MB_OK);
break;
case LINECALLSTE_OFFERING:
lineAnswer(myhCall,NULL,0);
break;// 完 成 自 动 应 答
case LINECALLSTATE_IDLE:
lineDeallocateCall(myhCall);
break;
case LINECALLSTATE_DISCONNECTED:
lineClose(myhLine);
lineShutDown(myhTapi);
break;
}
}
六、 改 进 措 施
---- 以 上 程 序 中 使 用 的 是 同 步 读 写 方 式, 只 要WriteFile 或 者Read File 没 有 完 成 指 定 的I/O 任 务, 它 们 就 不 会 返 回 进 程, 在 许 多 情 况 下, 这 是 令 人 难 以 容 忍 的CPU 时 间 浪 费; 改 进 的 办 法 是 在 每 次 读 之 前 采 用ClearCommError 函 数 确 定 系 统 的 串 行 口 缓 冲 区 中 到 底 有 了 多 少 字 节 的 接 收 数 据, 而 写 方 式 采 用 异 步 方 式, 首 先 应 该 定 义 一 个OVERLAPPED 结 构, 从BC++5.0 中 获 得 的 结 构 定 义 如 下
:
typedef struct _OVERLAPPED { // o
DWORD Internal;
DWORD InternalHigh;
DWORD Offset;
DWORD OffsetHigh;
HANDLE hEvent;
} OVERLAPPED;
---- 我 们 定 义OVERLAPPED myOVLP;
---- 我 们 只 用 到 了 其 中 的hEvent 成 员, 其 他 成 员 均 置0;hEvent 设 置 为CreateEvent(NULL,TRUE,FALSE,NULL) 产 生 的 事 件 句 柄; 然 后 如 下 调 用WriteFile(myhModem,"Received",8,&len,&myOVLP);
---- 函 数 将 立 即 返 回, 此 后, 只 要GetOverlappedResult 函 数 返 回TRUE , 写 操 作 就 算 完 成 了