摘要: 上节中介绍了几种Windows平台创建及删除线程的api及它们的差别,这节具体介绍以下信息:1.线程内核对象(操作系统接口CreateThread内部实现)2.线程数据块_tiddata(C/C++运行时库的实现 _beginthreadex与_beginthread)3.线程结束_endthreadex下面分别介绍一、线程内核对象线程创建时,会先创建一个线程内核对象(分配在进程的地址空间上),如上图,存储上下文context(一个数据结构)及一些统计信息,具体包括:1.寄存器SP:指向栈中线程函数指针的地址2.寄存器IP:指向装载的NTDLL.dll里RtlUserThreadStart函数 阅读全文
posted @ 2012-11-27 15:07 t427 阅读(8624) 评论(0) 推荐(1) 编辑
摘要: 一、线程创建Windows线程在创建时会首先创建一个线程内核对象,它是一个较小的数据结构,操作系统通过它来管理线程。新线程可以访问进程内核对象的所有句柄、进程中的所有内存及同一进程中其它线程的栈。创建有以下几种方式,分别说明CreateThread(...) (操作系统提供的API,尽量不要使用)_beginthread(...)_beginthreadex(...)AfxBeginThread(...) (MFC提供的接口)首先声明一个线程函数,原型为:DWORD FunThread(LPVOID pParam);1. CreateThread()该函数为操作系统提供,原型如下:HANDLE 阅读全文
posted @ 2012-11-17 21:53 t427 阅读(3814) 评论(2) 推荐(1) 编辑
摘要: 字符串函数是笔试面试中最易被考到的了,有以下几点需要注意:总是判断传入指针是否为空;在有返回值的函数中要记得记录返回地址根据函数不同形参可能为const, 如strcpy的const char* pSrcstrncpy, memset等函数的最后形参(长度或要复制的字数)的类型,本文用int(因实现问题,若使用size_t,有更好的移植性,但写法上要注意)memcpy及memmove函数要判断字符内存重叠的情况编码规范另外一些其它人的建议,不确定是否好用判断指针为空时,要使用if(p==NULL), 而不是if(p)有导常时,使用throw而不是assert尽量使用指针的前移(++),而不是前 阅读全文
posted @ 2012-11-13 21:48 t427 阅读(1610) 评论(3) 推荐(1) 编辑
摘要: 题目要求:请设计数据结构并写出算法,统计一篇文章中每个单词出现的次数,并按单词在文章中出现的顺序输出单词及它的个数。个人思路:采用了类似键树的思想,用该树来存储单词及某个单词出现的次数;树从根节点到叶子节点组成一个单词,每个节点只存储该单词里的某个字符;用孩子兄弟法表示树,用左孩子记录某个单词出现的次数(参见树结构图),可让每个单词必有左孩子(创建新节点同时创建左孩子)。这样就能得到单词及其个数,题目中要求按出现顺序输出可以用一个list或vector存放单词记录,该记录里存放单词及指向代表该单词访问记录数的树节点指针,这样文章读完后,将list或vector里的记录输出即可。其它思路:(1) 阅读全文
posted @ 2012-09-19 23:53 t427 阅读(3349) 评论(0) 推荐(0) 编辑
摘要: 程序员面试精选类博客题目出自何海涛的网易博客,本博客只记录自己的实现,以供学习。传送门:程序员面试题精选100题(19)-反转链表[数据结构]题目:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};分析:可以将链表表示为如下形式:逆置操作相当于每次操作pCur节点,并将其next指向pPre,这样直到链表尾。个人实现:无头节点的链表反转实现://输入一个链表的头结点,反转该链表,并返回反转后链表的头结点ListNode* ReverseL... 阅读全文
posted @ 2012-08-27 14:29 t427 阅读(209) 评论(0) 推荐(0) 编辑
摘要: class Student{public: int getAge() { return m_age; } int getAge() const { return m_age; } void setAge(int age) { m_age = age; } void setAge(int age) const { //此处报错,提示左值不是const //m_age = age; }public: int m_age;};众所周知,在相同参数及相同名... 阅读全文
posted @ 2012-08-11 20:32 t427 阅读(3641) 评论(0) 推荐(0) 编辑
摘要: 程序员面试精选类博客题目出自何海涛的网易博客,本博客只记录自己的实现,以供学习。传送门:程序员面试题精选100题(15)-含有指针成员的类的拷贝题目:给出了一个模板类Array的声明与实现,问该代码有什么问题,如何解决。View Code template<typename T> class Array{public: Array(unsigned arraySize):data(0), size(arraySize) { if(size > 0) data = new T[size]; } ~Ar... 阅读全文
posted @ 2012-08-10 22:23 t427 阅读(534) 评论(0) 推荐(0) 编辑
摘要: 程序员面试精选类博客题目出自何海涛的网易博客,本博客只记录自己的实现,以供学习。传送门:程序员面试题精选100题(14)-圆圈中最后剩下的数字[算法]题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。分析:本题就是有名的约瑟夫环问题。既然题目有一个数字圆圈,很自然的想法是我们用一个数据结构来模拟这个圆圈。在常用的数据结构中,我们很容易想到用环形列表。我们可以创建一个总共有m个数字的环形列表,然后每次从这 阅读全文
posted @ 2012-08-10 13:58 t427 阅读(463) 评论(0) 推荐(0) 编辑
摘要: 先说下itoa,将数字转换成字符串。利用了在一个数后面加‘0’即可将之转换成char型,这样将每个数字转换成char后即成为一个逆序的字符数组,再逆序下即可。atoi即将char-'0'即得整数。代码中需要注意的地方:1.函数名:可以设想有atoi有返回值来标识是否成功转换//参数要为constbool atoi(const char* pStr,int &nValue)2.atoi中对于无法转换成数字的字符的判断,方式如下:if(pStr[i] >= '0' && pStr[i] <= '9'){ //转换} 阅读全文
posted @ 2012-07-03 12:12 t427 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 1.'std' : does not exist or is not a namespace错误:使用using namespace std;时报错原因:未知修改:与<iostream>一起用注意:不能用<iostream.h>,它与<iostream>是不同的,二者文件也不相同。<iostream.h>是C的用法,其输入输出流被定义为全局命名空间;<iostream>是标准C++用法,调用时并不是全局命名空间,要用namespace std;命名空间std封装的是标准程序库的名称,标准程序库为了和以前的头文件区别,一 阅读全文
posted @ 2012-06-12 21:57 t427 阅读(143) 评论(0) 推荐(0) 编辑