⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readrawdata.cpp

📁 传感器读取程序
💻 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 + -