摘要:
上节中介绍了几种Windows平台创建及删除线程的api及它们的差别,这节具体介绍以下信息:1.线程内核对象(操作系统接口CreateThread内部实现)2.线程数据块_tiddata(C/C++运行时库的实现 _beginthreadex与_beginthread)3.线程结束_endthreadex下面分别介绍一、线程内核对象线程创建时,会先创建一个线程内核对象(分配在进程的地址空间上),如上图,存储上下文context(一个数据结构)及一些统计信息,具体包括:1.寄存器SP:指向栈中线程函数指针的地址2.寄存器IP:指向装载的NTDLL.dll里RtlUserThreadStart函数 阅读全文
摘要:
一、线程创建Windows线程在创建时会首先创建一个线程内核对象,它是一个较小的数据结构,操作系统通过它来管理线程。新线程可以访问进程内核对象的所有句柄、进程中的所有内存及同一进程中其它线程的栈。创建有以下几种方式,分别说明CreateThread(...) (操作系统提供的API,尽量不要使用)_beginthread(...)_beginthreadex(...)AfxBeginThread(...) (MFC提供的接口)首先声明一个线程函数,原型为:DWORD FunThread(LPVOID pParam);1. CreateThread()该函数为操作系统提供,原型如下:HANDLE 阅读全文
摘要:
字符串函数是笔试面试中最易被考到的了,有以下几点需要注意:总是判断传入指针是否为空;在有返回值的函数中要记得记录返回地址根据函数不同形参可能为const, 如strcpy的const char* pSrcstrncpy, memset等函数的最后形参(长度或要复制的字数)的类型,本文用int(因实现问题,若使用size_t,有更好的移植性,但写法上要注意)memcpy及memmove函数要判断字符内存重叠的情况编码规范另外一些其它人的建议,不确定是否好用判断指针为空时,要使用if(p==NULL), 而不是if(p)有导常时,使用throw而不是assert尽量使用指针的前移(++),而不是前 阅读全文