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

📄 interruptio.cpp

📁 2410下面的外部中断的测试程序 此代码包含驱动和应用程序
💻 CPP
字号:
// InterruptIO.cpp: implementation of the InterruptIO class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "InterruptApp.h"
#include "InterruptIO.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

InterruptIO::InterruptIO()
{
	m_hDev = INVALID_HANDLE_VALUE;
}

InterruptIO::~InterruptIO()
{

}


DWORD InterruptIO::ReadIOThreadFunc(LPVOID lparam)
{
	InterruptIO *Dipio = (InterruptIO*)lparam;
	if(Dipio->m_hDev == INVALID_HANDLE_VALUE)
	{
		return 0;
	}
	while(TRUE)
	{
	  if(Dipio->m_hDev != INVALID_HANDLE_VALUE)
	  {
	    ReadFile(Dipio->m_hDev,(WORD*)&(Dipio->m_RegValue),sizeof(WORD),&(Dipio->m_dwReadedBytes),NULL);
	    Dipio->m_onDipRead(Dipio->m_pPortOwner,&(Dipio->m_RegValue));
	  }
	  if(WaitForSingleObject(Dipio->m_readIOCloseEvent,1000) == WAIT_OBJECT_0)
	  {
		 break;
	  }
	}
	return 0;

}

void InterruptIO::ClosePort()
{
		if(m_hDev == INVALID_HANDLE_VALUE)
	{
		return;
	}
	CloseReadThread();
	if(CloseHandle(m_hDev))
	{
		m_hDev = INVALID_HANDLE_VALUE;
		return;
	}

}

void InterruptIO::CloseReadThread()
{
	SetEvent(m_readIOCloseEvent);
	if(WaitForSingleObject(m_readIOThread,1000) == WAIT_TIMEOUT)
	{
		m_readIOThread = NULL;
	}

}

void InterruptIO::SetWindowFun(CWnd *pPortOwner, ONDIPIOREAD pFunc)
{
	m_pPortOwner=pPortOwner;
	m_onDipRead = pFunc;

}

BOOL InterruptIO::OpenPort()
{
	if(m_hDev != INVALID_HANDLE_VALUE)
	{
		return TRUE;
	}
	m_hDev = CreateFile(_T("KEY1:"),GENERIC_READ | GENERIC_WRITE,NULL,NULL,OPEN_EXISTING,NULL,NULL);
	if(m_hDev == INVALID_HANDLE_VALUE)
	{
		TRACE(_T("CreateFile 返回句柄无效"));
		return FALSE;
	}
	else 
	{
		m_readIOCloseEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
		m_readIOThread=CreateThread(NULL,0,ReadIOThreadFunc,this,0,&m_dwReadIOThreadID);
		TRACE(_T("CreateFile 打开设备成功"));
		return TRUE;
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -