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

📄 commrev.cpp

📁 串口通讯演示程序
💻 CPP
字号:
#include "stdafx.h"
#include "CeTools.h"
#include "UManageView.h"

extern int ExitRevThread2;
/***********************************************************
	用途:从串口读取数据存入RvBuff中
	调用:独立线程
	参数:父指针
	返回:不用
***********************************************************/
UINT CommRev( LPVOID pParam )
{
	BYTE Buff[600];
	int rnum;
	int i;
	WORD k=0;
	CFile cf;

	CUManageView* pObject = (CUManageView*)pParam;
	if(pObject == NULL || !pObject->IsKindOf(RUNTIME_CLASS(CUManageView)))	return 0; // 非法参数
//网络广播
	BOOL optval=TRUE;
	BOOL NetFlag=FALSE;
	SOCKADDR_IN to;
	WSADATA			wsd;
	SOCKET			s;
	SOCKADDR_IN		in;

	to.sin_family	=AF_INET;
	to.sin_addr.s_addr=INADDR_BROADCAST;
	to.sin_port=htons(700);

	if (WSAStartup(MAKEWORD(1, 1), &wsd) != 0)
		return 10;
	if((s=socket(AF_INET, SOCK_DGRAM, 0))== INVALID_SOCKET)
		return 10;

	ZeroMemory(&in,sizeof(in));
    in.sin_family		=AF_INET;
	in.sin_addr.s_addr	=INADDR_ANY;
	in.sin_port			=htons(800);
	if(bind(s,(LPSOCKADDR)&in,sizeof(in)) == SOCKET_ERROR)
	{
		closesocket(s);
		pObject->MessageBox("网络创建失败!","错误",MB_ICONERROR);
		return 10;
	}
	if(setsockopt(s,SOL_SOCKET,SO_BROADCAST,(char *)&optval,sizeof(optval))==SOCKET_ERROR)
	{
		closesocket(s);
		pObject->MessageBox("网络创建失败!","错误",MB_ICONERROR);
		return 10;
	}
	NetFlag=TRUE;
///////////////
	cf.Open("RevData.bin",CFile::modeCreate|CFile::modeWrite);
	k=0;
	while(1)
	{
		pObject->RvStr.TimerCount++;
		Sleep(50);
		if(ExitRevThread2)//退出
		{
			cf.Close();
			closesocket(s);
			return 10;
		}
		if(pObject->idCom==0)//串口未打开
			continue;

		rnum=pObject->Read_Com(pObject->idCom,Buff,599);
		if(rnum>0)
		{			
			if(NetFlag)//广播
				sendto(s,(char *)Buff,rnum,0,(LPSOCKADDR)&to,sizeof(SOCKADDR));
			////////////////
			pObject->RvStr.TimerCount=0;
			//单位时间内收到的数据量
			if(rnum<=(R_BUFFER_SIZE-pObject->RvStr.Endp))
			{
				CopyMemory(&pObject->RvStr.RvBuff[pObject->RvStr.Endp],Buff,rnum);
				pObject->AddToList(&pObject->RvStr.RvBuff[pObject->RvStr.Endp],rnum,0);
			}
			else
			{
				i=R_BUFFER_SIZE-pObject->RvStr.Endp;
				CopyMemory(&pObject->RvStr.RvBuff[pObject->RvStr.Endp],Buff,i);
				pObject->AddToList(&pObject->RvStr.RvBuff[pObject->RvStr.Endp],i,0);

				CopyMemory(pObject->RvStr.RvBuff,&Buff[i],rnum-i);
				pObject->AddToList(pObject->RvStr.RvBuff,rnum-i,0);
			}
			pObject->RvStr.Endp+=rnum;
			pObject->RvStr.Endp%=R_BUFFER_SIZE;
			cf.Write(Buff,rnum);
			k++;
//			if(k%2==0)
				pObject->m_AnimateIcon_Ctrl.ShowNextImage();
//			pObject->app->ErrCodeRate_m.run=1;
//			pObject->app->ErrCodeRate_m.CommTotalLen+=rnum;
		}
		else
		{
			pObject->RvStr.TimerCount++;
//			if(pObject->RvStr.TimerCount>1200)
//				pObject->app->ErrCodeRate_m.run=0;
		}
		if(ExitRevThread2)
		{
			cf.Close();
			closesocket(s);
			return 10;
		}
	}
	cf.Close();
	closesocket(s);
	return 1;
}

⌨️ 快捷键说明

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