使用procexp.exe查看线程

一般网络多线程服务器软件开发会涉及ACE和log4cxx。

使用ACE_Task可以很方便地进行多线程编程。

本文将简单演示一下,如何使用log4cxx可以日志的形式记录多线程的执行情况;以及如何使用procexp.exe查看当前进程中执行的线程。

以下是一段简单的代码:

#include "ace/OS.h"
#include "ace/Task.h"
#include <iostream>

#include <log4cxx/logger.h>
#include <log4cxx/basicconfigurator.h>
#include <log4cxx/propertyconfigurator.h>
#include <log4cxx/xml/domconfigurator.h>
#include <log4cxx/helpers/exception.h>

using namespace log4cxx;
using namespace log4cxx::xml;
using namespace log4cxx::helpers;

class MyTask : public ACE_Task<ACE_NULL_SYNCH>
{
public:
	MyTask() {
		BasicConfigurator::configure();
		PropertyConfigurator::configure("log4j.properties");
		_rootLogger = Logger::getRootLogger();
	}

	int svc()
	{
		_rootLogger->debug("执行线程");
		for (int i = 0; i < 100; ++i)
		{
			Sleep(1000);
		}
		return 0;
	}

private:
	LoggerPtr _rootLogger;
};

int ACE_TMAIN(int, ACE_TCHAR *[])
{
	MyTask task;
	task.activate(THR_NEW_LWP | THR_JOINABLE, 2);

	task.wait();
	task.close();

	return 0;
}

代码中,将分配2个线程,这两个线程都会执行svc()方法。
使用procexp.exe可以查看当前的进程中的线程情况,如下图所示:


可以看到进程4992,分配了三个线程:3452(主线程)、4144、5576(因为这两个线程大部分时间都是Sleep,所有看不到所占用的CPU情况)

日志文件hello.log中也记录相应的情况:(进程ID使用的十六进制)
DEBUG root [0x00001030] - 执行线程   --->  4144线程
DEBUG root [0x000015c8] - 执行线程   --->  5576线程

======================================
本文示例中使用的log4cxx,可以参考另一篇文章:
windows下log4cxx编译和使用记录
http://blog.csdn.net/vivianke/article/details/7833482




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值