MFC応用におけるいくつかの小さな問題
1472 ワード
詳細
最近、MFCフレームワークのテストプログラムをメンテナンスし、HIDデバイスの命令プロトコルをテストします.途中で出会って解決したいくつかの小さな問題は、以下のように記録されています.
1.システム時間、ミリ秒レベルの取得
2.hid_を使うEnumerate hidデバイスリストを取得すると、使用したhidデバイスが消えます.
後で気づいた
a.デバイス接続後、hid_Enumerateはこのデバイスを表示しません
b.デバイス接続を閉じた後にデータを読むスレッドが終了しなかったのでhid_Enumerateがデバイスを取得しても、このデバイスはありません.したがって、接続を閉じるときにスレッドを閉じる必要があります.
データを読む現場のflag判断を増加し、false時return 0.デバイスを閉じるときにflagをfalseとし、スレッドが終了したと判断します.
3.editボックスに入力を取得し、uint 8_に移動t.(主にバイトビット数がペアでなければオーバーフローします).cstringなのでswscanf()を使います
最近、MFCフレームワークのテストプログラムをメンテナンスし、HIDデバイスの命令プロトコルをテストします.途中で出会って解決したいくつかの小さな問題は、以下のように記録されています.
1.システム時間、ミリ秒レベルの取得
SYSTEMTIME sys;
GetLocalTime(&sys);
char nTime[20];
sprintf(nTime, "%02d:%02d:%02d.%03d : ", sys.wHour, sys.wMinute, sys.wSecond, sys.wMilliseconds);
2.hid_を使うEnumerate hidデバイスリストを取得すると、使用したhidデバイスが消えます.
後で気づいた
a.デバイス接続後、hid_Enumerateはこのデバイスを表示しません
b.デバイス接続を閉じた後にデータを読むスレッドが終了しなかったのでhid_Enumerateがデバイスを取得しても、このデバイスはありません.したがって、接続を閉じるときにスレッドを閉じる必要があります.
ThreadFlag = false;
hid_close(HID_handle);
HID_handle = NULL;
DWORD exitCode = 0;
for (;;)
{
GetExitCodeThread(pReadHIDThread, &exitCode);
if (exitCode != STILL_ACTIVE)
break;
}
データを読む現場のflag判断を増加し、false時return 0.デバイスを閉じるときにflagをfalseとし、スレッドが終了したと判断します.
3.editボックスに入力を取得し、uint 8_に移動t.(主にバイトビット数がペアでなければオーバーフローします).cstringなのでswscanf()を使います
uint8_t buff[13];
CString txt;
GetDlgItem(IDC_EDIT_CFGCMD)->GetWindowText(txt);
swscanf(txt, L"%hhx %hhx %hhx %hhx %hhx %hhx %hhx %hhx %hhx %hhx %hhx %hhx %hhx", &buff[0], &buff[1], &buff[2], &buff[3], &buff[4], &buff[5], &buff[6], &buff[7], &buff[8], &buff[9], &buff[10], &buff[11], &buff[12]);