資源簡介
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個文件信息
評論
共有 條評論