现在位置: 首页 > 多线程编程
基本上有种使用线程的场合: 通过利用处理器的多个核使处理速度更快。 为保持GUI线程或其他高实时性线程的响应,将耗时的操作或阻塞的调用移到其他线程。 何时使用其他技术替代线程 开发人员使用线程时需要非常小心。启动线程是很容易的,但确保所有共享数据保持一致很难。遇到问题往往很难解决,这是由于在一段时间内它可能只出现一次或只在特定的硬件配置下出现。在创建线程来解决某些问题之前,应该考虑一些替代的技术...
阅读全文
2014-10-03 03:11 工业·编程 ⁄ 共 4342字 暂无评论
1. 前言 在阅读研究线程池的源码之前,一直感觉线程池是一个框架中最高深的技术。研究后才发现,线程池的实现是如此精巧。本文从技术角度分析了线程池的本质原理和组成,同时分析了JDK、Jetty6、Jetty8、Tomcat的源码实现,对于想了解线程池本质、更好的使用线程池或者定制实现自己的线程池的业务场景具有一定指导意义。 2. 使用线程池的意义 复用:类似WEB服务器等系统,长期来看内部需要使用大量的线程处理请求,而单次请求...
阅读全文
2014-07-01 06:10 工业·编程 ⁄ 共 1658字 暂无评论
只有在使用MFC框架时才有UI线程和工作者线程之分。UI线程与工作者线程的区别是操作系统为UI线程创建并维护了一个消息队列。 其实线程在创建时(无论是API还是MFC),都是工作者线程。当线程调用发送消息或提取消息或图形用户界面相关的函数时,系统才为其创建一个消息队列和THREADINFO结构,这时的线程才称为UI线程。 VC开发的控制台程序的主线程是工作线程,其他程序的主线程为UI线程。_beginthreadex/CreateThread等函数创建...
阅读全文
2014-07-01 05:55 工业·编程 ⁄ 共 6039字 暂无评论
作者注: 由于本人对Windows底层机理了解不深,本文如有错误,敬请指正。                                               金旭亮 ================================================...
阅读全文
2014-07-01 05:10 工业·编程 ⁄ 共 2105字 暂无评论
首先声明, 这里的工作线程与UI线程是相对的,即没有任何窗口的. 如果需要与主线程或其它辅助线程通讯,有几种方法如事件,消息,信号等,也可以是以上几种方法的综合运用.下面就列出以下3种通讯方法的代码框架   (1)只用消息通讯 DWORD ThreadProc(LPVOID lParam)  {      //创建线程消息队列      MSG msg;      PeekMessage(&msg, NULL, WM_USER, WM...
阅读全文
2014-05-30 16:34 工业·编程 ⁄ 共 3269字 暂无评论
    守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。 守护进程的编程本身并不复杂,复杂的是各种版本的Unix的实现机制不尽相同,造成不同U...
阅读全文
    I/O设备处理必然让主程序停下来干等I/O的完成,解决这个问题,可以使用OVERLAPPED。 OVERLAPPED I/O是WIN32的一项技术, 你可以要求操作系统为你传送数据,并且在传送完毕时通知你。这项技术使你的程序在I/O进行过程中仍然能够继续处理事务。事实上,操作系统内部正是以线程来I/O完成OVERLAPPED I/O。你可以获得线程的所有利益,而不需付出什么痛苦的代价。也就是说,OVERLAPPED主要是设置异步I/O操作,异步I...
阅读全文
创建了一个结构体,其中有一个字段是线程句柄HANDLE,当新创建的线程执行时,需要去获取结构体中关于该句柄的其他内容; 因此,以HANDLE作为查找条件进行获取。于是想起GetCurrentThread()方法来获取当前线程的句柄。 函数原型: HANDLE GetCurrentThread(void); 返回值: A pseudohandle for the current thread indicates success 注意:这里是pseudohandle,即伪句柄,而不是真实的句柄。 相关阅读 ----获取当前进程 / 线程...
阅读全文
hThread = CreateThread( NULL, 0, ThreadFunc, NULL, 0, &dwThreadId); CloseHandle(hThread); 如上面这样的代码,原因为:创建线程后返回了线程句柄,新创建的线程内核对象的使用计数是2,一个是线程本身,一个是创建线程的线程,创建线程的线程closehandle后,新的线程的内核对象使用计数为1,当这个新线程结束运行后内核对象的使用计数还要减1,这时内核对象的使用计数是0,则系统会自动删除新线程的内核对象,这是正常...
阅读全文
2014-05-20 08:15 工业·编程 ⁄ 共 2225字 暂无评论
什么是句柄: 句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需...
阅读全文