📄 readrawdata.cpp
字号:
#include <windows.h>
#include <process.h> // include _beginthreadex
#include "readrawdata.h"
#include "initialize.h"
#include "accelerator.h"
unsigned __stdcall ReadRawDataProc(void *);
/***************************************
函数功能: 开一个专门负责读串口数据的线程
***************************************/
HANDLE StartReadThread(HWND hwnd, HANDLE hAccelerator, OVERLAPPED *pOverlappedRead, OVERLAPPED *pOverlappedWrite)
{
static uintptr_t ThreadHandle = NULL;
static READTHREADPARAM arglist;
arglist.m_hwnd = hwnd;
arglist.m_hAcclerator = hAccelerator;
arglist.m_pOverlappedRead = pOverlappedRead;
arglist.m_pOverlappedWrite= pOverlappedWrite;
//调用_beginthreadex函数需将环境设置为多线程模式,否则编译不通过
ThreadHandle = _beginthreadex(NULL,
0,
ReadRawDataProc,
(void *)&arglist,
0,
NULL);
return (HANDLE)ThreadHandle;
}
/***************************************
函数功能: 线程的回调函数.
***************************************/
unsigned __stdcall ReadRawDataProc(void *param)
{
HWND hwnd = ((READTHREADPARAM *)param)->m_hwnd;
HANDLE hAcclerator = ((READTHREADPARAM *)param)->m_hAcclerator;
OVERLAPPED *pOverlappedRead = ((READTHREADPARAM *)param)->m_pOverlappedRead;
OVERLAPPED *pOverlappedWrite = ((READTHREADPARAM *)param)->m_pOverlappedWrite;
//当发送"V"给加速器,返回的是6 bytes的"x x-value y y-value z z-value"格式数据
static char szBuffer[6];
static DWORD dwByteRead = 6;
while(1)
{
if(!HandShakeToAccelerator(hAcclerator, pOverlappedWrite,'V', 1))
{
return -1;
}
if(!HandShakeFromAccelerator(hAcclerator,pOverlappedRead, szBuffer, dwByteRead))
{
SendMessage(hwnd, AM_CLOSEACCELERATION, NULL, NULL);
return -2;
}
PostMessage(hwnd, AM_ANALYZEDATA, (WPARAM)dwByteRead, (LPARAM)szBuffer);
// 这里一定要让它睡眠1~2毫秒.如果不睡眠,响应动作会有很大的延时.超过2毫秒会漏读数据,
// 因为经过统计,该加速器平均3毫秒响应一次
Sleep(2);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -