摘要:
STL container classes thread safe(Microsoft C++ implementation)? Answer from MSDN: The container classes are vector, deque, list, queue, stack, priority_queue, valarray, map, hash_map, multimap, hash_multimap, set, hash_set, multiset, hash_multiset, basic_string, and bitset. A single object is threa 阅读全文
posted @ 2011-04-10 14:49
super119
阅读(1085)
评论(0)
推荐(0)
摘要:
也就是如何在UNICODE编程下的控制台显示中文字符,使用wcout,_tprintf输出中文的时候,屏幕上什么都没输出-空白。很郁闷。后来在网上搜了一下原来是要设置一下本地属性。 Code: Select all#include <locale.h >int _tmain(int argc, _TCHAR* argv[]){ //****** 设置本地属性********* setlocale(LC_ALL,"CHS"); _tprintf( _T("中文\n"); wcout<< _T(“中文")<<en 阅读全文
posted @ 2011-04-10 14:49
super119
阅读(363)
评论(0)
推荐(0)
摘要:
通过windows via C/C++,知道了kernel object,也知道了用完了kernel object之后,要调用CloseHandle。这个函数的作用就是将该kernel object的usage count - 1,当这个count为0的时候,该kernel object会变成signal状态/销毁。 kernel object是不属于process的,是属于windows内核的。process只有一个kernel object handle table,用来存放所有的kernel object handle。所以,多个process可以同时使用一个kernel object 阅读全文
posted @ 2011-04-10 14:49
super119
阅读(335)
评论(0)
推荐(0)
摘要:
strsafe.h不能在windows.h, tchar.h, 包括很多C++的头文件,比如<map>,之前被include。否则编译的时候就会报windows.h, tchar.h, winbase.h...这些头文件中定义错误,或是重复定义。 所以,安全的做法是: 1. 在cpp文件中include <strsafe.h>,因为一般要include这个文件,都是要使用StringCch*函数,这些函数的使用一般都是在cpp中。 2. 在include的时候,要让strsafe.h在上述那些头文件之后被include在网上搜到的资料显示,strsafe.h头文件中会把 阅读全文
posted @ 2011-04-10 14:48
super119
阅读(972)
评论(0)
推荐(0)
摘要:
这个是FAT32文件系统分区的缘故,一般有如下症状; 第一次Build 的时候从不出问题,在以后重新Build 的时候,可能随机地出现问题。可能你Build间隔的时间足够长,也不会出问题。 微软也知道这个bug,但是看来没有打算完全解决它的意向,倒是在项目属性中有个选项,让你在FAT32 下也能正常工作。具体如何解决,是这样做的: 如果是把项目放在FAT32分区,那么这样操作: 英文版roject Properties -> Manifest Tool-> Use FAT32 Work-around -->Yes 中文版:项目-->项目属性-->配置属性--> 阅读全文
posted @ 2011-04-10 14:48
super119
阅读(408)
评论(0)
推荐(0)
摘要:
MSDN中说,__FILE__宏展开后是表示源文件的名字。如果在编译选项中加入/FC,那么,出来的源文件的名字就包含全路径,否则,名字就包含相对路径。很显然,我们希望名字包含相对路径,全路径太长,看起来太累。所以,在visual studio中,项目属性设置中,最后的编译命令行中我check了一下,没有发现/FC。但是奇怪的是程序运行的时候,发现__FILE__出来的源文件照样包含全路径。google 一下,发现了原因:/ZI option如果被指定,那么,/FC就会被隐式的指定。/ZI表示生成program database(pdb文件),这个文件在Debug的时候有用,包含了程序的symb 阅读全文
posted @ 2011-04-10 14:47
super119
阅读(839)
评论(0)
推荐(0)
摘要:
比如有这么一个map:map<TCHAR *, TCHAR *> map1;这样当往map1中插入数据的时候,key是一个指针。在SDClient中,我们将文本资源读入一个map,然后将来使用literal的文本key字符串来将value取出,从而达到国际化的目的。但是这里有一个问题就是,由于key是一个指针,所以当我们尝试用literal的TCHAR *来取出value时,发现value取不出来。这是因为插入数据时候的TCHAR *和我们取的时候的TCHAR *,两个指针的地址不一样。那 应该怎么办呢?我们的目的其实是比较key指向的字符串,而不是key本身。但是查看了map的定 阅读全文
posted @ 2011-04-10 14:47
super119
阅读(3984)
评论(0)
推荐(0)
摘要:
SDClient中,使用HeapAlloc分配了一块内存,用来存放从text resource file中读出的内容。然后接着会使用_tcstok_s来使用\n作为token来split这个大字符串。那 为什么在分配内存的时候,要多分配一个字符的内存呢?很简单,这个字符要存放一个\0。因为text resource file文件的最后没有\0,所以,当把text resource file的内容全部读出来之后,要手动设置最后一个字符为\0,这样,_tcstok_s来split到最后的时候才能正确工作。否则,由于最后一个 token后面既没有\n,也没有\0,那么,_tcstok_s就会读到bu 阅读全文
posted @ 2011-04-10 14:47
super119
阅读(241)
评论(0)
推荐(0)
摘要:
Windows中内存page的copy on write属性非常有用。他保证了如果一个应用程序的多个实例被启动,或是一个dll被多个启动的应用程序同时使用时,全局和静态变量不会受到污染。大致原理就是:应 用程序启动多个实例,这多个进程的地址空间中,应用程序部分地址空间对应到physical storage上,都是一份(memory map的)。所以,如果一个实例尝试修改一个全局或静态变量时,如果没有copy-on-write,这个变量就会被污染。所以windows在使用 memory map装载应用程序时,对全局和静态变量识别,然后给存放这些变量的page设上copy-on-write属性,这 阅读全文
posted @ 2011-04-10 14:46
super119
阅读(555)
评论(0)
推荐(0)
摘要:
windows下的Unicode是UTF-16,每个字都用两个字节来表示。编程的时候,通过TEXT宏,以及在项目中定义Unicode, _Unicode变量,就可以保证整个项目都是在Unicode下工作。现在在将字符串写入文件的时候,发生了一些问题。写文件用的是WriteFile函数,字符串本身都是UTF-16的,写入文件后发现用vim和记事本打开都无法正确显示。用16进制的方式查看,每个字都是对的,都是2个字节,如果是英文字母,第二个字节就是00。google 了一下,发现了答案。要在文件开头写入0xfffe,这是Unicode file的identifier,windows下的记事本和写字 阅读全文
posted @ 2011-04-10 14:46
super119
阅读(1481)
评论(0)
推荐(0)