摘要: DWORDWaitForSingleObject(HANDLE hObject, DWORD dwMilliseconds);WaitForSingleObject的返回值能够指明调用线程为什么再次变为可调度状态。如果线程等待的对象变为已通知状态,那么返回值是WAIT_OBJECT_0。如果设置的超时已经到期,则返回值是WAIT_TIMEOUT。如果将一错误的值(如一个无效句柄)传递给WaitForSingleObject,那么返回值将是WAIT_FAILED(若要了解详细信息,可调用GetLastError)。DWORD WaitForMultipleObjects(DWORD dwCou. 阅读全文
posted @ 2013-08-09 17:07 smartl 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 为什么需要线程池?目前的大多数网络服务器,包括Web、服务器、Email服务器以及数据库服务器等都具有一个共同点,就是单位时间内必须处理数目巨大的连接请求,但处理时间却相对较短。传统多线程方案中我们采用的服务器模型则是一旦接受到请求之后,即创建一个新的线程,由该线程执行任务。任务执行完毕后,线程退出,这就是是“即时创建,即时销毁”的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数极其频繁,那么服务器将处于不停的创建线程,销毁线程的状态。我们将传统方案中的线程执行过程分为三个过程:T1、T2、T3。 T1:线程创建时间 T2:线程执.. 阅读全文
posted @ 2013-08-09 16:39 smartl 阅读(336) 评论(0) 推荐(0) 编辑
摘要: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它线程也不能调用这个方法。按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是 SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的 LRESULT值返回给调用者。在多线程编程里面,一些敏感数据不允许被多个线程同时访问,此时就使用同步访问技术,保证数据在任何时刻,最多有一个线程访问,以保证数据的完 阅读全文
posted @ 2013-08-09 15:16 smartl 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 一般开子线程都是为了主线程服务,这样就少不了线程间的通信。1.使用全局变量进行通信。一般使用volatile关键字。 使用volatile修饰符,它告诉编译器无需对该变量作任何的优化,即无需将它放到一个寄存器中,并且该值可被外部改变。如果线程间所需传递的信息较复杂,我们可以定义一个结构,通过传递指向该结构的指针进行传递信息。2.使用自定义消息 利用Windows操作系统的消息驱动机制,当一个线程发出一条消息时,操作系统首先接收到该消息,然后把该消息转发给目标线程,接收消息的线程必须已经建立了消息循环。 主线程m_pCalculateThread->PostThreadMessage(WM 阅读全文
posted @ 2013-08-09 10:42 smartl 阅读(305) 评论(0) 推荐(1) 编辑
摘要: MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。 工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面线程一般用于处理独立于其他线程执行之外的用户输入,响应用户及系统所产生的事件和消息等。但对于Win32的API编程而言,这两种线程是没有区别的,它们都只需线程的启动地址即可启动线程来执行任务。 在MFC中,一般用全局函数AfxBeginThread()来创建并初始化一个线程的运行,该函数有两种重载形式,分别用于创建工作者线程和用户界面线程。(1)... 阅读全文
posted @ 2013-08-09 10:41 smartl 阅读(2564) 评论(0) 推荐(0) 编辑
摘要: WaitForSingleObject函数,其函数原型为:DWORD WaitForSingleObject(HANDLE hHandle,DWORDdwMilliseconds);hHandle为要监视的对象(一般为同步对象,也可以是线程)的句柄;dwMilliseconds为hHandle对象所设置的超时值,单位为毫秒; 当在某一线程中调用该函数时,线程暂时挂起,系统监视hHandle所指向的对象的状态。如果在挂起的dwMilliseconds毫秒内,线程所等待的对象变为有信号状态,则该函数立即返回;如果超时时间已经到达dwMilliseconds毫秒,但hHandle所指向的对象还没有. 阅读全文
posted @ 2013-08-08 16:09 smartl 阅读(972) 评论(0) 推荐(0) 编辑
摘要: 多线程常用API Win32 提供了一系列的API函数来完成线程的创建、挂起、恢复、终结以及通信等工作。下面将选取其中的一些重要函数进行说明。1、HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags,... 阅读全文
posted @ 2013-08-08 15:23 smartl 阅读(872) 评论(0) 推荐(0) 编辑
摘要: 一直没有过博客,做程序员这么久以来,没有系统地学习过什么东西,也没有系统地总结过自己,所以各方面都觉得不完善,希望自己能够积极行动起来,摆正心态,开始从零学起,夯实基础,并借此博客,把学习的过程与心得记录下来,算是一个见证,也对自己是一个提示。如果对他人能够有所启发,那便是莫大的荣幸与欣慰了。 阅读全文
posted @ 2013-08-07 13:59 smartl 阅读(150) 评论(0) 推荐(0) 编辑