杂谈
今天觉得没有什么意义。一大早开始就逃课,悲催呢。呵呵,其实我不想逃课,但是这种叫马克思的东西从初中开始就一直跟着我了,说句实话,我看见它就想吐了。回到教室后,开始看看昨天晚上写的那个哈夫曼编码,觉得好久没有敲代码了,生疏了啊。修改了些东西。然后突然发现:为什么vs2005没有报告内存泄露呢??我自己new的对象,我自己没有delete,但是编译器却没有报告。奇怪了。先不管了,自己添加上delete的代码吧。
第二件事----关于namespace
C++ 提供了命名空间的机制。我觉得这好像java的包差不多了。其实我对java不是很了解。不知道java的包和namespace有什么主要的区别。namespace主要是为了解决命名冲突的。在大型程序中,肯定需要定义很多的类,变量,函数等。由于分工不同,每个人负责自己的模块,这就难以避免命名冲突了。为了避免命名冲突,使用namespace,每个namespace就是一个作用域。在每个namespace内不允许有相同的名字,在不同的namespace可以有相同的名字。比如:
namespace Test1
{
class CTest
{
Public:
CTest()
{
std::cout<<”construction belong to namespace Test1”<<std::endl;
}
};
}
namespace Test2
{
class CTest
{
Public:
CTest()
{
std::cout<<”Construction belong to namespace Test2”<<std::endl;
}
};
}
在需要使用namespace内的变量的时候,可以指定namespace进行引用。也可以使用using进行指定。如果需要引用namespaceTest1中的CTest,可以使用Test1::CTest,也可以使用using Test1::CTest,这样的话在本使用using的作用域内,所有的CTest就是Test1::CTest。
namespace还具有分开定义的功能。在标准命名空间(std)中,定义了许多类,模板等。其都是分别定义在相应的文件中。所以,定义namespace的时候只需要标明所定义的类属于哪个namespace。当进入该namespace的时候就是可见的。
注意:namespace的定义不能使用”;”表示结束。
从早上开始看那本书—--编程之美。各位不要嘲笑我哦,我可不是看它的名字和作者来看的。我只是觉得这本书能够很通俗易懂的将算法和编程结合在一起。所以才去啃一啃的。开篇文章(让CPU占用率曲线听你指挥),在读第一遍的时候,做了下试验。但是现在机器都是双核的,无法验证那单核的效果。不过在双核机器上实现占用率50%的话是很简单的。只要写一个死循环就KO了。关键的地方是学到了个SetThreadAffinityMask()。
函数介绍:
DWORD_PTR WINAPISetThreadAffinityMask(
__in HANDLE hThread,
__in DWORD_PTRdwThreadAffinityMask
);
参数:
hThread为要设定掩码的线程的句柄;该句柄必须具备THREAD_SET_INFORMATION 或者THREAD_SET_LIMITED_INFORMATION的权限以及THREAD_QUERY_INFORMATION 或者THREAD_QUERY_LIMITED_INFORMATION的权限。
dwThreadAffinityMask为掩码。
返回值:
如果该函数成功执行,将返回先前进程的掩码;如果未成功执行,则返回0.欲获得出错信息,请调用GetLastError()。