DBT_DEVICEARRIVAL事件,同時接入若干設備,只能捕獲2個嗎,誰試過?就是同時插入3~4個U盤,DBT_DEVICEARRIVAL事件只能捕獲2個
uj5u.com熱心網友回復:
沒試過,不敢說話uj5u.com熱心網友回復:
這個訊息收的時候,如果是2個以下,沒有問題,同時接入3個,總會丟失1個,同時接入4個,總會丟失2個
uj5u.com熱心網友回復:
能獲得的個數不只2個但同時插入是什么意思?幾個人一起插這樣測驗?
uj5u.com熱心網友回復:
對,按照順序接入,只要有時間差,都可以接收,但是同時接入,幾乎是一個時間的情況下,丟失
我是找了一個usb hub做的實驗,上面接滿了U盤,然后把這個hub接入usb口
uj5u.com熱心網友回復:
沒有試過一下子快速拔除/插入這么多USB設備。。猜測一下:
The system broadcasts the DBT_DEVICEARRIVAL device event when a device or piece of media has been inserted and becomes available.
也是反應周期的事?
建議使用 DBT_DEVNODES_CHANGED 來檢測。
uj5u.com熱心網友回復:
我開發環境是win10,后來放在win7下跑,比win10效果好些
uj5u.com熱心網友回復:
而且這個DBT_DEVNODES_CHANGED,沒辦法獲取U盤盤符
uj5u.com熱心網友回復:
沒人知道,沒人嘗試過嗎,準確的說是,DBT_DEVTYP_VOLUME收不到uj5u.com熱心網友回復:
個人建議, 接收到訊息以后 掃一下, GetDriveType(szDrv ) == DRIVE_REMOVABLEuj5u.com熱心網友回復:
接到什么訊息?DBT_DEVICEARRIVAL這個嗎
uj5u.com熱心網友回復:
WM_DEVICECHANGE
uj5u.com熱心網友回復:
個人建議, 接收到訊息以后 掃一下, GetDriveType(szDrv ) == DRIVE_REMOVABLE
接到什么訊息?DBT_DEVICEARRIVAL這個嗎
WM_DEVICECHANGE
能說詳細一些嗎,目的是什么,我要獲取盤符,只能是DBT_DEVTYP_VOLUME這個吧?
uj5u.com熱心網友回復:
個人建議, 接收到訊息以后 掃一下, GetDriveType(szDrv ) == DRIVE_REMOVABLE
接到什么訊息?DBT_DEVICEARRIVAL這個嗎
WM_DEVICECHANGE
這個也試了下,還是同時接入3個USB存盤設備,只能處理1個,接入4個,只能處理2個
uj5u.com熱心網友回復:
把 dbcv_unitmask 打出來看看,并在計算器中以二進制查看到底有幾個 bit 設定為 1,說明新增了幾個卷。case WM_DEVICECHANGE:
switch (wParam)
{
case DBT_DEVICEARRIVAL:
if (((PDEV_BROADCAST_HDR)lParam)->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME pdvol = (PDEV_BROADCAST_VOLUME)lParam;
printf("0x%08X\n", pdvol->dbcv_unitmask);
}
break;
case DBT_DEVICEREMOVECOMPLETE:
if (((PDEV_BROADCAST_HDR)lParam)->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME pdvol = (PDEV_BROADCAST_VOLUME)lParam;
printf("0x%08X\n", pdvol->dbcv_unitmask);
}
break;
default:
break;
}
break;
uj5u.com熱心網友回復:
把 dbcv_unitmask 打出來看看,并在計算器中以二進制查看到底有幾個 bit 設定為 1,說明新增了幾個卷。case WM_DEVICECHANGE:
switch (wParam)
{
case DBT_DEVICEARRIVAL:
if (((PDEV_BROADCAST_HDR)lParam)->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME pdvol = (PDEV_BROADCAST_VOLUME)lParam;
printf("0x%08X\n", pdvol->dbcv_unitmask);
}
break;
case DBT_DEVICEREMOVECOMPLETE:
if (((PDEV_BROADCAST_HDR)lParam)->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME pdvol = (PDEV_BROADCAST_VOLUME)lParam;
printf("0x%08X\n", pdvol->dbcv_unitmask);
}
break;
default:
break;
}
break;
這個試過了,同時接入3個,列印2個或者1個,同時接入4個,列印2個
uj5u.com熱心網友回復:
搜“devcon”?uj5u.com熱心網友回復:
搜“devcon”?
搜了,這個不是一個tools嗎
uj5u.com熱心網友回復:
搜“devcon”?
搜了,這個不是一個tools嗎
使用這個tools應該可以毫無遺漏地列出當前連接的所有設備的詳細資訊。
uj5u.com熱心網友回復:
搜“devcon”?
搜了,這個不是一個tools嗎
使用這個tools應該可以毫無遺漏地列出當前連接的所有設備的詳細資訊。
串列應該沒問題,我意思是事件,那個插入的事件捕獲問題
uj5u.com熱心網友回復:
搜“devcon”?
搜了,這個不是一個tools嗎
使用這個tools應該可以毫無遺漏地列出當前連接的所有設備的詳細資訊。
串列應該沒問題,我意思是事件,那個插入的事件捕獲問題
事件捕獲有遺漏的原因之一是事件處理時間太長。
試試使用一個FIFO緩沖區,將事件捕獲和事件處理解耦。
uj5u.com熱心網友回復:
搜“devcon”?
搜了,這個不是一個tools嗎
使用這個tools應該可以毫無遺漏地列出當前連接的所有設備的詳細資訊。
串列應該沒問題,我意思是事件,那個插入的事件捕獲問題
事件捕獲有遺漏的原因之一是事件處理時間太長。
試試使用一個FIFO緩沖區,將事件捕獲和事件處理解耦。
這個也試過,感覺事件重疊覆寫了
uj5u.com熱心網友回復:
捕獲到重疊事件時,拆成一系列單獨的事件。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/122948.html
標籤:硬件/系統
