原创串口类库v2的使用范例,很简单,高手勿入

类别:编程语言 点击:0 评论:0 推荐:

有不少朋友来信问我上次发表的串口类库得使用方法;
我这里有个简单的程序, 有需要的朋友可以看一看;
cnComm.h见http://blog.csdn.net/wujian53/archive/2004/10/23/148385.aspx

#pragma warning(disable: 4530)
#pragma warning(disable: 4786)

#include <iostream>
#include <exception>

using namespace std;

#include <winsock2.h>
#include <windows.h>
#include "cnComm.h"

//以下程序是每500ms送一次数据从COM1 到 COM2
//我没有实际测试, 不在单位, 没连接线
//不过我相信没问题
//接收数据是在线程中

class MyComm : public cnComm//从cnComm扩展,自己处理 接受数据的
{
public:
 //这是cnComm的虚函数, 供监视线程调用的, 监视线程一收到数据就会调用这个函数
 //如果你是桌面应用就要发送自定义的窗口消息, 这是我在cnComm中默认用法
 virtual void OnReceive()
 {
  char Buffer[256];
  if(Read(Buffer, 256))//从串口读数据 并打印在控制台窗口
   cout << "Receive Data Form COM" << _dwPort << " : " << Buffer << endl;
 }
};

int main(int argc, char *argv[])
{
 try
 {
  //测试将PC的COM1 COM2相连测试
  cnComm Com1(false, 0);//阻塞 串口1 用来发送数据
  Com1.Open(1, 1200);//波特率1200

  MyComm Com2;//继承扩展使用 非阻塞 串口2 用来接受数据
  Com2.Open(2, 1200);

  char Buffer[100] = {0};
  
  for(int i = 0; i < 10; i++)
  {
   Sleep(500);//每500ms送一次

   sprintf(Buffer, "这是第%d组数据 From COM1", i + 1);
   //这里如果用异步,即非阻塞的读写方式, 函数会立即返回, 并且返回发送的字节数为0
   //实际的发送在系统的后台进行
   //我这里用的是阻塞方式,为的是你可以看到发送的过程, 和发送的字节数;
   //实际应用中一般用非阻塞(异步)的方式
   cout << "COM1 Send Data " << Com1.Write(Buffer) << " Byte."<< endl;
  }

  Sleep(500);
  cout << "Exit..." << endl;

  Com1.Close();
 }
 catch(exception &e)
 {
  cout << e.what() << endl;
 }
 return 0;
}

本文地址:http://com.8s8s.com/it/it25702.htm