当前位置: 首页 > news >正文

网站制作公司合肥长沙网络营销学校

网站制作公司合肥,长沙网络营销学校,布吉做棋牌网站建设,设计出色的网站主要思路是: 使用重叠 I/O(OVERLAPPED),避免阻塞 ConnectNamedPipe。额外创建一个“停止事件”(hStopEvent),在线程中与管道事件一起 WaitForMultipleObjects,一旦收到停止事件就马…

主要思路是:

  1. 使用重叠 I/O(OVERLAPPED),避免阻塞 ConnectNamedPipe。
  2. 额外创建一个“停止事件”(hStopEvent),在线程中与管道事件一起 WaitForMultipleObjects,一旦收到停止事件就马上退出循环。
  3. 在主线程(或 OnNcDestroy)中 SetEvent(hStopEvent) 通知线程退出,然后再 CloseHandle 管道和事件。
// 假设这几个都是类成员或全局变量:
HANDLE hPipe = INVALID_HANDLE_VALUE;      // 管道句柄
HANDLE hStopEvent = NULL;                 // 停止事件
HANDLE hOvEvent   = NULL;                 // OVERLAPPED 事件
HANDLE hThread    = NULL;                 // 工作线程句柄bool OpenPipe(MsgHandleInterface* msgHandle)
{// 1. 创建停止事件(自动重置、初始未置位)hStopEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);if (!hStopEvent) return false;// 2. 创建 OVERLAPPED 专用事件hOvEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);if (!hOvEvent) {CloseHandle(hStopEvent);return false;}// 3. 创建命名管道,注意 FILE_FLAG_OVERLAPPEDLPCTSTR lpszPipename = TEXT(CMWAITMSGPIPENAME);hPipe = CreateNamedPipe(lpszPipename,PIPE_ACCESS_INBOUND | FILE_FLAG_OVERLAPPED,  // 重叠模式PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,1,BUFSIZE,BUFSIZE,0,NULL);if (hPipe == INVALID_HANDLE_VALUE) {CloseHandle(hOvEvent);CloseHandle(hStopEvent);return false;}// 4. 启动后台线程DWORD dwThreadId = 0;hThread = CreateThread(NULL,0,waitConnectThread,(LPVOID)msgHandle,    // 如果需要传递 msgHandle,可用结构体打包0,&dwThreadId);if (!hThread) {CloseHandle(hPipe);CloseHandle(hOvEvent);CloseHandle(hStopEvent);return false;}msgHandleObj = msgHandle;return true;
}// 窗口销毁或退出时调用
void ClosePipe()
{if (hStopEvent) {// 通知线程退出SetEvent(hStopEvent);}if (hThread) {// 等待线程结束WaitForSingleObject(hThread, INFINITE);CloseHandle(hThread);hThread = NULL;}if (hPipe != INVALID_HANDLE_VALUE) {CloseHandle(hPipe);hPipe = INVALID_HANDLE_VALUE;}if (hOvEvent) {CloseHandle(hOvEvent);hOvEvent = NULL;}if (hStopEvent) {CloseHandle(hStopEvent);hStopEvent = NULL;}
}// 线程入口:使用 OVERLAPPED + 双事件等待
DWORD WINAPI waitConnectThread(LPVOID lpvParam)
{UNREFERENCED_PARAMETER(lpvParam);OVERLAPPED ov = {};ov.hEvent = hOvEvent;// 先发起一次异步 ConnectNamedPipeBOOL fConnected = ConnectNamedPipe(hPipe, &ov);if (!fConnected && GetLastError() != ERROR_IO_PENDING) {// 如果既没马上连接,也不是挂起状态,就退出return 1;}// 等待停止事件 or 重叠 I/O 完成事件HANDLE waitArr[2] = { hStopEvent, hOvEvent };for (;;){DWORD idx = WaitForMultipleObjects(2, waitArr, FALSE, INFINITE);if (idx == WAIT_OBJECT_0) {// 收到停止信号break;}// 否则是管道连接完成if (idx == WAIT_OBJECT_0 + 1) {DWORD bytesTransferred = 0;if (!GetOverlappedResult(hPipe, &ov, &bytesTransferred, FALSE)) {// I/O 错误,退出break;}// 接收数据TCHAR buffer[BUFSIZE] = {};DWORD cbRead = 0;if (ReadFile(hPipe, buffer, BUFSIZE * sizeof(TCHAR), &cbRead, NULL) && cbRead > 0) {// 处理消息msgHandleObj->handlePipeMsg(buffer);}// 断开并重新挂起下一个连接DisconnectNamedPipe(hPipe);ResetEvent(hOvEvent);fConnected = ConnectNamedPipe(hPipe, &ov);if (!fConnected && GetLastError() != ERROR_IO_PENDING) {// 无法再次挂起连接,就退出break;}}else {// 其他错误break;}}return 0;
}
http://www.tj-hxxt.cn/news/27892.html

相关文章:

  • 商城网站框架搜索引擎seo优化怎么做
  • wordpress主题进的慢标题优化怎样选关键词
  • 网站优化建设哈尔滨网站点击排名优化
  • 想招人去哪个平台免费合肥百度关键词优化
  • 青岛做视频的网站爱链
  • 厦门高端网站案例永久免费国外域名注册
  • 广州定制型网站建设网站运营策划书范文
  • 公司网站后台维护怎么做搜索引擎营销策划方案
  • 哈尔滨网站搜索优化公司百度识别图片找图
  • 网站开发与维护书大数据培训
  • 做优化的网站用什么空间好营销软文范例大全
  • wordpress 帖子置顶南宁百度seo软件
  • 2021今天特大军事新闻西安百度推广优化公司
  • 泰安专业网站建设公司seo工程师招聘
  • 什么网站可以做设计赚钱的吗西安seo引擎搜索优化
  • 免费模板下载网站推荐免费的自媒体一键发布平台
  • 张家港做网站优化排名今日头条热搜榜
  • 河北网站建设网络营销管理
  • 嘉峪关建设厅官方网站自建站平台
  • 一个人可以做网站吗营销活动推广策划
  • 医疗产品网站建设seo百度seo排名优化软件
  • 网站搜索引擎关键字怎么做长春网站建设技术支持
  • vip影视网站如何做app中国营销网
  • 北京市政府网站首都之窗新手怎么学做电商
  • 天天爱天天做网站免费建立一个网站
  • 李志自己做网站福州百度网站排名优化
  • 官方网站建设必要性推广自己的产品
  • 织梦怎么修改网站模板我为什么不建议年轻人做销售
  • 在国外做网站卖国内的东西百度竞价点击神器
  • 深圳市宝安区邮编朝阳区seo技术