资源简介
trakStar系列跟踪器的伺服程序,采用多线程命名管道技术,可以为多个进程提供数据输出服务。

代码片段和文件信息
#include “Tracker.h“
#include
#include
#include
#include
#define BUFFERSIZE 256 //缓冲区大小
#define MAX_NUM_PIPES 5 //线程个数,即允许同时连接的客户机个数
//隐藏窗口
#pragma comment( linker “/subsystem:\“windows\“ /entry:\“mainCRTStartup\“ “)
DWORD WINAPI PipeInstanceProc(LPVOID lpParameter); //多线程回调函数
DWORD WINAPI ListenPipeProc(LPVOID lpParameter); //监听管道回调函数
Tracker *tracker;
int main(int argcchar** argv)
{
//判断程序是否运行第二次
HANDLE hMutex = NULL;
TCHAR* lpszName = “TestMutex“;
hMutex = CreateMutex(NULLFALSElpszName);
DWORD dwRet=GetLastError();
if(hMutex)
{
if(ERROR_ALREADY_EXISTS == dwRet)
{
//some warnings here...
CloseHandle(hMutex);
return -1;
}
}
printf(“等待跟踪器启动...\n“);
tracker=new Tracker();
printf(“跟踪器开始写数据...\n“);
HANDLE hThreadHandle;//线程句柄
DWORD threadId;//线程号
//创建五个线程,分别处理一个客户机连接
for (int i=0;i {
hThreadHandle=CreateThread(
NULL//WinNT后永久设为NULL
0//线程初始化堆栈大小,一般设为0
PipeInstanceProc//线程回调函数的指针,即函数名
NULL//传输给回调函数的参数,通过它实现对回调函数的控制
0//线程创建完毕后的状态,0表示创建后执行线程,CREATE_SUSPENDED表示暂时挂起,等待叫醒
&threadId//线程ID值的地址
);
if(hThreadHandle==NULL)
{
printf(“创建线程%d失败!%d\n“iGetLastError());
return 0;
}
printf(“创建命名管道线程%d成功!“i);
}
//等待线程结束
WaitForSingleobject(hThreadHandleINFINITE);
CloseHandle(hThreadHandle);
hThreadHandle=NULL;
delete tracker;
return 0;
}
/*
* 函数名称: PipeInstanceProc
* 函数参数: (in)LPVOID: 附加信息
* 函数作用: 处理一个命名管道实例的线程
* 函数返回值:(DWORD)若顺利完成,则返回1;若获取域名失败,则返回0
*/
DWORD WINAPI PipeInstanceProc(LPVOID lpParameter)
{
HANDLE hPipeHandle;//命名管道的句柄
HANDLE hThreadListen;//管道监听句柄
/*
* 函数名称: CreateNamedPipe
* 函数参数: (in)LPCTSTR 命名管道名字,UNC标准( \\IP地址\Pipe\唯一标识文件路径 )
* (in)DWORD 命名管道模式,单双向,读写控制,安全模式( 均被宏定义好,可位或操作 )
* (in)DWORD 命名管道读,写,等待模式( 均被宏定义好,可位或操作 )
* (in)DWORD 命名管道最多可创建的实例句柄个数
* (in)DWORD 命名管道输出缓冲区大小
* (in)DWORD 命名管道输入缓冲区大小
* (in)DWORD 命名管道默认超时时间
* (in)LPSECURITY_ATTRIBUTES 命名管道安全描述符,若为NULL,则句柄不可继承的默认安全。
* 函数作用: 创建一个命名管道实例
* 函数返回值:(HANDLE)成功则返回命名管道实例的句柄,失败则返回值INVALID_HANDLE_VALUE
*/
hPipeHandle = CreateNamedPipe(
_T(“\\\\.\\pipe\\TrackerService“)
PIPE_ACCESS_DUPLEX
PIPE_TYPE_BYTE | PIPE_READMODE_BYTE |PIPE_WAIT
PIPE_UNLIMITED_INSTANCES
BUFFERSIZE
BUFFERSIZE
0
NULL
);
if (hPipeHandle == INVALID_HANDLE_VALUE)
{
printf(“创建命名管道失败!%d\n“GetLastError());
return 0;
}
printf(“创建命名管道成功!\n“);
HANDLE h;//线程句柄,用于一个客户机退出连接之后,服务器重新建立一个服务线程
//处理客户端信息
while (1)
{
/*
* 函数名称: ConnectNamedPipe
* 函数参数: (in)HANDLE: 命名管道实例句柄
* (in)LPOVERLAPPED 是否锁定式命名管道
* 函数作用: 建立命名管道连接并监听
* 函数返回值:(bool)若顺利建立,则返回true;若顺利失败,则返回false
*/
if (ConnectNamedPipe(hPipeHandleNULL))
{
printf(“有客户端连接命名管道!\n“);
//Create listen pipe thread
hThreadList
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 33 2011-03-31 10:55 TrackerService\Debug\PCIBird3.ini
文件 45056 2011-03-31 10:54 TrackerService\Debug\TrackerService.exe
文件 446976 2011-03-31 10:57 TrackerService\Debug\TrackerService.ilk
文件 625664 2011-03-31 10:54 TrackerService\Debug\TrackerService.pdb
文件 33 2010-11-03 23:21 TrackerService\Release\PCIBird3.ini
文件 11776 2010-11-04 11:48 TrackerService\Release\TrackerService.exe
文件 437248 2010-11-04 11:48 TrackerService\Release\TrackerService.pdb
文件 6058 2011-03-31 10:57 TrackerService\TrackerService\Debug\BuildLog.htm
文件 52345 2011-03-31 10:57 TrackerService\TrackerService\Debug\Main.obj
文件 69 2011-03-31 10:54 TrackerService\TrackerService\Debug\mt.dep
文件 23412 2011-03-26 16:49 TrackerService\TrackerService\Debug\SingleClass.obj
文件 66330 2011-03-31 10:53 TrackerService\TrackerService\Debug\Tracker.obj
文件 663 2011-03-31 10:54 TrackerService\TrackerService\Debug\TrackerService.exe.em
文件 728 2011-03-31 10:54 TrackerService\TrackerService\Debug\TrackerService.exe.em
文件 621 2011-03-31 10:54 TrackerService\TrackerService\Debug\TrackerService.exe.intermediate.manifest
文件 609280 2011-03-31 10:57 TrackerService\TrackerService\Debug\vc90.idb
文件 266240 2011-03-31 10:57 TrackerService\TrackerService\Debug\vc90.pdb
文件 5507 2011-03-31 10:57 TrackerService\TrackerService\Main.cpp
文件 33 2011-03-31 10:51 TrackerService\TrackerService\PCIBird3.ini
文件 5172 2010-11-04 12:01 TrackerService\TrackerService\Release\BuildLog.htm
文件 587127 2010-11-04 11:59 TrackerService\TrackerService\Release\Main.obj
文件 69 2010-11-04 11:48 TrackerService\TrackerService\Release\mt.dep
文件 591728 2010-11-03 23:20 TrackerService\TrackerService\Release\Tracker.obj
文件 616 2010-11-04 11:48 TrackerService\TrackerService\Release\TrackerService.exe.intermediate.manifest
文件 322560 2010-11-04 11:59 TrackerService\TrackerService\Release\vc90.idb
文件 241664 2010-11-04 11:59 TrackerService\TrackerService\Release\vc90.pdb
文件 327 2011-03-26 16:47 TrackerService\TrackerService\SingleClass.cpp
文件 227 2011-03-26 16:32 TrackerService\TrackerService\SingleClass.h
文件 3221 2011-03-26 17:14 TrackerService\TrackerService\Tracker.cpp
文件 2012 2010-11-24 23:40 TrackerService\TrackerService\Tracker.h
............此处省略15个文件信息
相关资源
- 欧姆龙控制2个伺服
- 直流伺服电机电路原理图(内附单片
- 伺服电机上位机软件源代码
- 基于三菱PLC-松下A6伺服485通讯-读编码
- 三菱直线伺服插补移动(XY轴直线移动
- 伺服驱动器原理图详解
- 基于ATmega128和CH374的USB接口设计
- sanyo伺服驱动器使用手册Ethercat版
- 倍福通过NC方式控制第三方伺服步科配
- 松下伺服马达
- 交流伺服电机及其控制.pdf
- 液压伺服控制系统 (修订本)王春行
- STM32伺服电机控制器
- 基于DSP交流伺服系统与CAN总线的通信
- 泰科智能 PIM2403A智能伺服驱动器用户
- 基于FPGA的伺服电机控制器
- S7-1200CANopen模块与台达伺服的通讯.d
- 无刷直流电机伺服控制
- ABB伺服选型手册
- 台达A2伺服MODBUS通讯调试工具
- 三菱MR-J2伺服手册中文版
- 台达伺服ASDA-B2使用手册(简体最新)
- 西门子伺服电机常用电机简明样本.
- 富士FALDIC-W系列伺服调试软件.rar
- 海德汉伺服驱动用位置编码器说明书
- 松下PLC控制伺服电机程序.pdf
- fpga伺服电机控制资料和源代码中期报
- A-PANATERM伺服通讯软件.zip
- 飞机液压传动与伺服控制
- 上银伺服电机调试步骤
评论
共有 条评论