高分求问获取USB设备是否连接问题

william7_138 2017-05-24 02:47:32
小弟最近接手了一个新的嵌入式软件,上位机软件在windows平台实现,运行于PC机上,下位机设备通过USB线连接到PC上,使用USB和上位机通信。上位机软件界面需要实时显示下位机设备是否连接到PC上,之前的代码实现是另外开了一个线程,在线程函数中通过一个死循环不断地调用下位机固件的API来获取USB设备的连接状态,然后再由界面模块更新USB设备的连接状态。我是觉得另外开一个线程监控,并且线程函数的主体还是一个死循环,好像有点浪费系统资源,实际上软件使用过程中USB基本处于连接状态。请问有没有更好的实现的方式?有的话希望各位大牛能够不吝赐教,小弟这里先谢谢了。
...全文
284 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
InsaneCode 2017-05-31
  • 打赏
  • 举报
回复
死循环+delay的方法对系统造成的影响不是很大,delay稍稍长一点,使用可以让出cpu的delay。或者WaitForSingleObject(..., 1000) 这种方法其实还好。不过最好还是等windows的消息。
  • 打赏
  • 举报
回复
设备插拔系统有消息产生的,楼上都说了。
william7_138 2017-05-27
  • 打赏
  • 举报
回复
多谢大家的回答,我先研究一下具体的资料,再来和大家讨论
  • 打赏
  • 举报
回复
#include "dbt.h" LRESULT CMyDlg::DefWindowProc( UINT message, WPARAM wParam, LPARAM lParam ) { if (message == WM_DEVICECHANGE) { PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam; switch(wParam) { case DBT_DEVICEARRIVAL: if( lpdb->dbch_devicetype == DBT_DEVTYP_PORT ) { PDEV_BROADCAST_PORT lpbp = (PDEV_BROADCAST_PORT)lpdb; if (wcsicmp(lpbp->dbcp_name, L"DSK2:\0") == 0) { m_bHasUSB = FALSE; m_lbTip.SetText(LoadStringEx(IDS_DETECTED_UDISK)); if (m_nTime == 0) { m_nTime = SetTimer(1, 1000, NULL); } m_bnUpdate.EnableWindow(FALSE); } } break; case DBT_DEVICEREMOVECOMPLETE: if( lpdb->dbch_devicetype == DBT_DEVTYP_PORT ) { PDEV_BROADCAST_PORT lpbp = (PDEV_BROADCAST_PORT)lpdb; if (wcsicmp(lpbp->dbcp_name, L"DSK2:\0") == 0) { if (m_nTime) { KillTimer(m_nTime); m_nTime = 0; } m_bHasUSB = FALSE; m_lbTip.SetText(LoadStringEx(IDS_UNDETECTED_UDISK)); m_bnUpdate.EnableWindow(FALSE); } } break; default: break; } } return CDialog::DefWindowProc(message, wParam, lParam); } 我自己的代码给你参考
of123 2017-05-25
  • 打赏
  • 举报
回复
利用 Windows 操作系统的 OnDeviceChange 消息。搜一下具体做法。
91program 2017-05-25
  • 打赏
  • 举报
回复
设备拔插,一般可以通过以下方式检测: 1)硬件中断,在 WinCE 系统中有一个 WM_DEVICECHANGE 消息可以用来做这个,标准的 USB 驱动都有这个消息,如:U 盘插入、iPod 插入 2)如果是 U 盘,会有文件系统 MOUNT 系统 3)如果是其它设备,一般也会有特定的连接成功消息 2)和3)都是在 1) 的基础之上实现的。
91program 2017-05-25
  • 打赏
  • 举报
回复
USB设备的插入与拔出,开一个线程监测的处理是正确的。 USB 设备有拔出的可能,这个在程序中就必需要处理,否则可能引起程序异常。

19,502

社区成员

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

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