資源簡介
多線程日志記錄源碼
多線程日志記錄源碼
多線程日志記錄源碼

代碼片段和文件信息
//?InfomationReport.cpp:?implementation?of?the?CInfoReport?class.
//
//////////////////////////////////////////////////////////////////////
#include?“stdafx.h“
#include?“WriteInfo.h“
#include?“InfomationReport.h“
#ifdef?_DEBUG
#undef?THIS_FILE
static?char?THIS_FILE[]=__FILE__;
#define?new?DEBUG_NEW
#endif
//?因?yàn)槭莝tatic?member,所以要在此聲明
CPtrList?CInfoReport::m_lstpThreads;
DWORD?CInfoReport::m_dwFatalErrThrdID;
//////////////////////////////////////////////////////////////////////
//?Construction/Destruction
//////////////////////////////////////////////////////////////////////
CInfoReport::CInfoReport()
{
}
CInfoReport::~CInfoReport()
{
}
//////////////////////////////////////////////////////////////////
// 功能函數(shù)
//////////////////////////////////////////////////////////////////
//
//??FUNCTION:?DWORD?Register(LPCTSTR?ModuleNameToReg)
//
//??PURPOSE:?根據(jù)傳入的模塊名返回一個(gè)ID為調(diào)用WriteInfo()作準(zhǔn)備
//
//??PARAMETERS:
// MoudleNameToReg:?用來獲取ID的模塊名稱。
//
//??RETURN?VALUE:
// DWORD類型,實(shí)際上是所分配線程在lstpThreads鏈表中的存儲(chǔ)位置。
//
//??COMMENTS:
//
// 當(dāng)需要日志記錄時(shí),需要用該函數(shù)取得一個(gè)ID來調(diào)用WriteInfo()。
// 該函數(shù)給出一個(gè)新的ID意味著為調(diào)用它的模塊產(chǎn)生了一個(gè)新的日志記錄線程。
//
DWORD?CInfoReport::Register(LPCTSTR?ModuleNameToReg)
{
CWriteInfo?*pWriteInfo?=?NULL;
POSITION?pos?posPrev;
//?首先要起動(dòng)一個(gè)維護(hù)FatalErr.log的線程
if(m_lstpThreads.IsEmpty())
{
CString?strFatalErr?=?“FatalErr.log“;
//?為每一個(gè)需要注冊(cè)的模塊創(chuàng)建操作對(duì)應(yīng)文件的線程
pWriteInfo?=?(CWriteInfo*)::AfxBeginThread(RUNTIME_CLASS(CWriteInfo)00CREATE_SUSPENDED);
pWriteInfo->SetModuleFileName(strFatalErr);
m_dwFatalErrThrdID?=?(DWORD)m_lstpThreads.AddTail(pWriteInfo);
pWriteInfo->ResumeThread();
}
????//?當(dāng)遇到在一個(gè)模塊內(nèi)重復(fù)調(diào)用該函數(shù)這種情況時(shí)仍然返回原有的ID即對(duì)應(yīng)線程在m_lstpThreads中的position即可
pos?=?m_lstpThreads.GetHeadPosition();
while(pos)
{
posPrev?=?pos;
pWriteInfo?=?(CWriteInfo*)m_lstpThreads.GetNext(pos);
if(0?==?pWriteInfo->GetName().CompareNoCase(ModuleNameToReg))
//if(ModuleNameToReg?==?pWriteInfo->GetName())
{
return?(DWORD)posPrev;
}
}
//?為每一個(gè)需要注冊(cè)的模塊創(chuàng)建或者打開操作對(duì)應(yīng)的文件
{
}
//?為每一個(gè)需要注冊(cè)的模塊創(chuàng)建操作對(duì)應(yīng)文件的線程
pWriteInfo?=?(CWriteInfo*)::AfxBeginThread(RUNTIME_CLASS(CWriteInfo)00CREATE_SUSPENDED);
pWriteInfo->SetModuleFileName(ModuleNameToReg);
pos?=?m_lstpThreads.AddTail(pWriteInfo);
pWriteInfo->ResumeThread();
return?(DWORD)pos;
}
//////////////////////////////////////////////////////////////////
// 功能函數(shù)
//////////////////////////////////////////////////////////////////
//
//??FUNCTION:?void?WriteInfo(DWORD?MoudleID?CString?InfoDescribe)
//
//??PURPOSE:?將提供的信息寫入到對(duì)應(yīng)的日志文件中。
//
//??PARAMETERS:
// MoudleID:?用Register()函數(shù)獲取來的模塊ID如果以NULL作為MoudleID來調(diào)
// ??用此函數(shù)那就意味著發(fā)生了致命錯(cuò)誤信息將被寫入到FatalErr.log文件中。
// InfoDescribe:?需要記錄的信息
//
//??RETURN?VALUE:
// N/A
//
//??COMMENTS:
//
// 用該函數(shù)寫入日志信息。
//
void?CInfoReport::WriteInfo(DWORD?MoudleID?CString?InfoDescribe)
{
/* //?如果以NULL作為MoudleID來調(diào)用此函數(shù)那就意味著發(fā)生了致命錯(cuò)誤.
if(MoudleID?==?NULL)
MoudleID?=?m_dwFatalErrThrdID;
*/??
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????1277??2007-06-14?10:13??InfoReportDemo多線程日志記錄good\Include\InfomationReport.h
?????文件???????5458??2007-06-14?12:25??InfoReportDemo多線程日志記錄good\InfoReport\InfomationReport.cpp
?????文件???????1561??2003-05-28?15:03??InfoReportDemo多線程日志記錄good\InfoReport\InfoReport.cpp
?????文件????????196??2003-05-28?15:03??InfoReportDemo多線程日志記錄good\InfoReport\InfoReport.def
?????文件???????4539??2007-06-14?13:31??InfoReportDemo多線程日志記錄good\InfoReport\InfoReport.dsp
?????文件????????543??2003-05-28?15:03??InfoReportDemo多線程日志記錄good\InfoReport\InfoReport.dsw
?????文件??????58368??2007-06-14?13:52??InfoReportDemo多線程日志記錄good\InfoReport\InfoReport.ncb
?????文件??????54784??2007-06-14?13:52??InfoReportDemo多線程日志記錄good\InfoReport\InfoReport.opt
?????文件????????256??2007-06-14?13:52??InfoReportDemo多線程日志記錄good\InfoReport\InfoReport.plg
?????文件???????3089??2003-05-28?15:03??InfoReportDemo多線程日志記錄good\InfoReport\InfoReport.rc
?????文件?????????51??2003-06-02?10:47??InfoReportDemo多線程日志記錄good\InfoReport\res\CVS\Entries
?????文件?????????23??2003-06-02?10:47??InfoReportDemo多線程日志記錄good\InfoReport\res\CVS\Repository
?????文件?????????46??2003-06-02?10:47??InfoReportDemo多線程日志記錄good\InfoReport\res\CVS\Root
?????文件????????402??2003-05-28?15:03??InfoReportDemo多線程日志記錄good\InfoReport\res\InfoReport.rc2
?????文件????????382??2003-05-28?15:03??InfoReportDemo多線程日志記錄good\InfoReport\Resource.h
?????文件????????212??2003-05-28?15:03??InfoReportDemo多線程日志記錄good\InfoReport\StdAfx.cpp
?????文件???????1485??2003-05-28?15:03??InfoReportDemo多線程日志記錄good\InfoReport\StdAfx.h
?????文件???????4511??2007-06-14?13:51??InfoReportDemo多線程日志記錄good\InfoReport\WriteInfo.cpp
?????文件???????1580??2003-05-29?14:25??InfoReportDemo多線程日志記錄good\InfoReport\WriteInfo.h
?????文件???????1965??2003-06-12?17:14??InfoReportDemo多線程日志記錄good\InfoReportTest\InfoReportTest.clw
?????文件???????4468??2007-06-14?12:37??InfoReportDemo多線程日志記錄good\InfoReportTest\InfoReportTest.cpp
?????文件???????4914??2007-06-14?12:47??InfoReportDemo多線程日志記錄good\InfoReportTest\InfoReportTest.dsp
?????文件????????551??2003-06-12?17:14??InfoReportDemo多線程日志記錄good\InfoReportTest\InfoReportTest.dsw
?????文件???????1444??2003-06-12?17:14??InfoReportDemo多線程日志記錄good\InfoReportTest\InfoReportTest.h
?????文件??????66560??2007-06-14?13:52??InfoReportDemo多線程日志記錄good\InfoReportTest\InfoReportTest.ncb
?????文件??????55808??2007-06-14?13:52??InfoReportDemo多線程日志記錄good\InfoReportTest\InfoReportTest.opt
?????文件????????838??2007-06-14?13:52??InfoReportDemo多線程日志記錄good\InfoReportTest\InfoReportTest.plg
?????文件???????9997??2003-06-12?17:14??InfoReportDemo多線程日志記錄good\InfoReportTest\InfoReportTest.rc
?????文件???????1902??2003-06-12?17:14??InfoReportDemo多線程日志記錄good\InfoReportTest\InfoReportTestDoc.cpp
?????文件???????1563??2003-06-12?17:14??InfoReportDemo多線程日志記錄good\InfoReportTest\InfoReportTestDoc.h
............此處省略34個(gè)文件信息
- 上一篇:C#調(diào)用PComm.dll
- 下一篇:Asp.net多線程
評(píng)論
共有 條評(píng)論