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

📄 comwin1.cpp

📁 用算法来实现一个收费系统
💻 CPP
字号:
// ComWin.cpp : implementation file
//

#include "stdafx.h"
#include "LaneSoft.h"
#include "ComWin.h"

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

CComWin * m_pCComWin1;
CComWin * m_pCComWin2;
CComWin * m_pCComWin3;
CComWin * m_pCComWin4;

UINT Com_Port_Start1(LPVOID param)
{
	static CString m_Show_Str = "";
	CString str;
	while(m_pCComWin1->m_bRunning)
	{
		WaitForSingleObject(m_pCComWin1->m_hREvent,INFINITE);
	    ReadFile(m_pCComWin1->hCom,
			    m_pCComWin1->m_RBuffer,1,
				&m_pCComWin1->m_RResult,
				&m_pCComWin1->m_Overlapped);
	}
	return 0;
}
UINT Com_Port_Start2(LPVOID param)
{
	static CString m_Show_Str = "";
	CString str;
	while(m_pCComWin2->m_bRunning)
	{
		WaitForSingleObject(m_pCComWin2->m_hREvent,INFINITE);
	    ReadFile(m_pCComWin2->hCom,
			    m_pCComWin2->m_RBuffer,1,
				&m_pCComWin2->m_RResult,
				&m_pCComWin2->m_Overlapped);
	}
	return 0;
}
/*
UINT Com_Port_Start3(LPVOID param)
{
	static CString m_Show_Str = "";
	CString str;
	while(m_pCComWin3->m_bRunning)
	{
		WaitForSingleObject(m_pCComWin3->m_hREvent,INFINITE);
	    ReadFile(m_pCComWin3->hCom,
			    m_pCComWin3->m_RBuffer,1,
				&m_pCComWin3->m_RResult,
				&m_pCComWin3->m_Overlapped);
	}
	return 0;
}
UINT Com_Port_Start4(LPVOID param)
{
	static CString m_Show_Str = "";
	CString str;
	while(m_pCComWin4->m_bRunning)
	{
		WaitForSingleObject(m_pCComWin4->m_hREvent,INFINITE);
	    ReadFile(m_pCComWin4->hCom,
			    m_pCComWin4->m_RBuffer,1,
				&m_pCComWin4->m_RResult,
				&m_pCComWin4->m_Overlapped);
	}
	return 0;
}
*/
/////////////////////////////////////////////////////////////////////////////
// CComWin
BOOL CComWin::Create(int nPort,DCB *pDCB)
{
	DCB dcb;
	HANDLE hTemp;
	BOOL fSuccess;
	CString str;
	
	memcpy((char *)&dcb,pDCB,sizeof(DCB));
	str.Format("COM%d",nPort);
	hTemp = CreateFile(str,GENERIC_READ|GENERIC_WRITE,
		              0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
	if(hTemp == INVALID_HANDLE_VALUE)
	{
	//	MessageBox("创建串口出错,错误%d","信息",MB_OK);
		return FALSE;
	}
	else
	{
		hCom = hTemp;
	}
	fSuccess = GetCommState(hCom,&dcb);
	if(!fSuccess)
	{
	//	MessageBox("无法获取状态字","出错",MB_OK);
		return FALSE;

	}
	
//	dcb.BaudRate = 9600;
//	dcb.ByteSize = 8;
//	dcb.Parity = NOPARITY;
//	dcb.StopBits = ONESTOPBIT;

	fSuccess = SetCommState(hCom,&dcb);
	if(!fSuccess)
	{
//		MessageBox("无法设置状态字","出错",MB_OK);
		return FALSE;
	}
	else
	{
		m_bRunning = TRUE;
		switch(nPort)
		{
		case 0:
			m_pCComWin1 = this;
			AfxBeginThread(Com_Port_Start1,NULL,THREAD_PRIORITY_NORMAL);
			break;
		case 1:
			m_pCComWin2 = this;
			AfxBeginThread(Com_Port_Start2,NULL,THREAD_PRIORITY_NORMAL);
			break;
//		case 2:
//			m_pCComWin3 = this;
//			AfxBeginThread(Com_Port_Start3,NULL,THREAD_PRIORITY_NORMAL);
//			break;
//		case 3:
//			m_pCComWin4 = this;
//			AfxBeginThread(Com_Port_Start4,NULL,THREAD_PRIORITY_NORMAL);
//			break;
		}

//		ReadFile(hCom,m_RBuffer,1,&m_RResult,&m_Overlapped);
		return TRUE;
	}


}
CComWin::CComWin()
{

	hCom = NULL;
	m_hREvent = CreateEvent(NULL,TRUE,FALSE,NULL);
	m_Overlapped.Offset = 0;
	m_Overlapped.OffsetHigh = 0;
	m_Overlapped.hEvent = m_hREvent;
}
CComWin::CComWin(int nPort,DCB * pDCB)
{
	hCom = NULL;
	m_hREvent = CreateEvent(NULL,TRUE,FALSE,NULL);
	m_Overlapped.Offset = 0;
	m_Overlapped.OffsetHigh = 0;
	m_Overlapped.hEvent = m_hREvent;

	Create(nPort,pDCB);
}

CComWin::~CComWin()
{
//	DWORD dwError;
//	char TempStr[100];
	if(!CloseHandle(hCom))
	{
//		dwError = GetLastError();
//		MessageBox(TempStr,"信息",MB_OK);
		return;
	}
	m_bRunning = FALSE;

}
int CComWin::WriteOut(BYTE * pBuffer,int nLen)
{
	DWORD result;
	BOOL fSuccess;

	if(hCom == NULL)
	{
//		MessageBox("设备未打开,请打开设备后再试","信息",MB_OK);
		return 0;
	}
	fSuccess = WriteFile(hCom,pBuffer,nLen,&result,NULL);
	if(!fSuccess)
	{
//		MessageBox("无法写入","信息",MB_OK);
		return 0;
	}
	return result;

}
BEGIN_MESSAGE_MAP(CComWin, CStatic)
	//{{AFX_MSG_MAP(CComWin)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CComWin message handlers

⌨️ 快捷键说明

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