?? iothread.cpp
字號:
// IOThread.cpp : implementation file
//
#include "stdafx.h"
#include "mcds.h"
#include "IOThread.h"
#include "GlobalVar.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CIOThread
IMPLEMENT_DYNCREATE(CIOThread, CWinThread)
CIOThread::CIOThread()
{
}
CIOThread::~CIOThread()
{
// DeviceIoControl(hDev, 0x222004,NULL, 0, NULL, 0, &nOutput, NULL);//停止設備的IOCTL by ming
// CloseHandle(hDev);//關閉設備句柄 by ming
}
BOOL CIOThread::InitInstance()
{
// TODO: perform and per-thread initialization here
// ULONG nOutput;//IOCTL 需要 by ming
// HANDLE hDev; //文件句柄 by ming
BOOL bRet = FALSE; //讀取正確或失敗
BOOL bRealWork=TRUE; //是否是真實工作狀態,正式版本將該功能屏蔽
unsigned char temp[256]; //讀取數據的緩存區
for(int i=0;i<256;i++){temp[i]=0;}
hDev=CreateFile("\\\\.\\MotoD12Device0",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL); //打開設備 by ming
if(hDev == INVALID_HANDLE_VALUE)
{
if(AfxMessageBox("未能找到設備!\n\n請檢查設備及其驅動是否正確連接和安裝\n\n是否進行虛擬數據采集?"
,MB_OKCANCEL,0)==IDOK)//失敗報錯 by ming
{
bRealWork=FALSE;
}
else
{
cs.Lock();//不執行虛擬則打開此句
nNumInfo[10]="關";
cs.Unlock();
}
}
else
{
DeviceIoControl(hDev, 0x222000, NULL, 0, NULL, 0, &nOutput, NULL);//啟動設備的IOCTL by ming
DeviceIoControl(hDev, 0x222008,NULL, 0, NULL, 0, &nOutput, NULL);//每次讀取的IOCTL by ming
}
while(bOnCollect()==true)//下面為數據采集代碼
{
if(bRealWork==FALSE)//虛擬數據
{
int i;
cs.Lock();
for (int n=0; n<=255; n++)
{
i=(int)(2*sin((double)n/(double)256*3.1415926)*(double)rand()/(double)32767);//模擬程序,生成數據,并可以調整計數率
if(data[n]+i>=65535)data[n]=65535;//防止數據溢出
else data[n]+=i;
}
cs.Unlock();
}
else
{
DWORD dwReturned;
bRet = ReadFile(hDev, temp, 64, &dwReturned, NULL);//依次讀取4個64字節
bRet = ReadFile(hDev, temp + 64, 64, &dwReturned, NULL);
bRet = ReadFile(hDev, temp + 128, 64, &dwReturned, NULL);
bRet = ReadFile(hDev, temp + 192, 64, &dwReturned, NULL);
cs.Lock();
for (int n=0; n<=255; n++)//將獲得的值加到data上
{
if(data[n]+temp[n]>=65535)data[n]=65535;//防止數據溢出
else data[n]+=temp[n];
}
cs.Unlock();
}
Sleep(10);
}
ExitInstance();
// AfxEndThread(NULL);//終止該線程
// DeviceIoControl(hDev, 0x222004,NULL, 0, NULL, 0, &nOutput, NULL);//停止設備的IOCTL by ming
// CloseHandle(hDev);//關閉設備句柄 by ming
return TRUE;
}
int CIOThread::ExitInstance()
{
// TODO: perform any per-thread cleanup here
DeviceIoControl(hDev, 0x222004,NULL, 0, NULL, 0, &nOutput, NULL);//停止設備的IOCTL by ming
CloseHandle(hDev);//關閉設備句柄 by ming
return CWinThread::ExitInstance();
}
BEGIN_MESSAGE_MAP(CIOThread, CWinThread)
//{{AFX_MSG_MAP(CIOThread)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CIOThread message handlers
bool CIOThread::bOnCollect()
{
bool temp;
cs.Lock();
if(nNumInfo[10]=="開")temp=true;
else temp=false;
cs.Unlock();
return temp;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -