DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

随笔分类 -  多线程编程

1 2 下一页

摘要:1、第一种方法(win和linux通用) //头文件.h#ifndef _HIK_EVENT_H_ #define _HIK_EVENT_H_ #ifdef _MSC_VER #include <Windows.h> #define hik_event_handle HANDLE #else #in 阅读全文
posted @ 2023-03-15 18:00 DoubleLi 阅读(312) 评论(0) 推荐(0) 编辑

摘要:Boost的thread库中目前并没有提供线程池,我在sorceforge上找了一个用boost编写的线程池。该线程池和boost结合的比较好,并且提供了多种任务执行策略,使用也非常简单。 下载地址: http://threadpool.sourceforge.net/ 使用threadpool: 阅读全文
posted @ 2017-05-19 10:14 DoubleLi 阅读(728) 评论(0) 推荐(0) 编辑

摘要:在做项目的过程中有时候为了提升效率,用了多线程的方法来对任务进行分割和应用,后来发现,采用线程池的方法能更好的利用线程资源来计算任务,网上有很多关于如何运行线程池的例子,msdn上也给出了对应的例子:https://msdn.microsoft.com/en-us/library/windows/d 阅读全文
posted @ 2016-04-18 19:13 DoubleLi 阅读(1170) 评论(0) 推荐(0) 编辑

摘要:pthread_mutex_initl头文件:#include l函数原型:int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);pthread_mutex_t... 阅读全文
posted @ 2015-06-10 17:07 DoubleLi 阅读(10215) 评论(0) 推荐(0) 编辑

摘要:在开发C++程序时,一般在吞吐量、并发、实时性上有较高的要求。设计C++程序时,总结起来可以从如下几点提高效率:l 并发l 异步l 缓存下面将我平常工作中遇到一些问题例举一二,其设计思想无非以上三点。1任务队列1.1 以生产者-消费者模型设计任务队列 生产者-消费者模型是人们非常熟悉的模型,比如在... 阅读全文
posted @ 2014-06-20 11:24 DoubleLi 阅读(3710) 评论(0) 推荐(0) 编辑

摘要:文章来源:[url]http://www.programfan.com/article/showarticle.asp?id=2951[/url]当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供... 阅读全文
posted @ 2014-05-13 21:09 DoubleLi 阅读(1743) 评论(0) 推荐(0) 编辑

摘要:ZThread库是一个开源的跨平台高级面向对象的线性和sycnchronization 库,以运行POSIX 和Win32 系统中的C++程序。ZThread库的主页:http://zthread.sourceforge.net最新版本Zthread远吗下载地址:http://prdownloads... 阅读全文
posted @ 2014-05-05 10:38 DoubleLi 阅读(453) 评论(0) 推荐(0) 编辑

摘要:vc基于对话框多线程编程实例——线程之间的通信实例: 阅读全文
posted @ 2014-04-30 17:11 DoubleLi 阅读(783) 评论(0) 推荐(0) 编辑

摘要:CreateThread、_beginthreadex和AfxBeginThread创建线程好几个函数可以使用,可是它们有什么区别,适用于什么情况呢?参考了一些资料,写得都挺好的,这里做一些摘抄和整合。【参考1】CreateThread, AfxBeginThread,_beginthread, _... 阅读全文
posted @ 2014-04-30 16:33 DoubleLi 阅读(884) 评论(0) 推荐(2) 编辑

摘要:Windows没有message queue累世的IPC内核对象,使得在在处理IPC时少了一种传递消息的手段。利用Windows的Naming Object可以实现一套简单的Inter-Thread消息队列。这里并不使用socket,因为一旦使用socket,就得负责port管理,很麻烦,另外在对外... 阅读全文
posted @ 2014-04-30 11:30 DoubleLi 阅读(3185) 评论(2) 推荐(0) 编辑

摘要:工作线程通常用来执行一些后台任务,如:数据计算、后台杀毒等等。因为不需要创建窗口和处理用户消息,编写比较容易,在程序中只要调用AfxBeginThread函数就可以创建并启动一个工作线程了。AfxBeginThread的原型如下:CWinThread*AfxBeginThread(AFX_THREADPROCpfnThreadProc, //指向控制函数的地址LPVOIDpParam, //指向传递给控制函数的参数intnPriority/*=THREAD_PRIORITY_NORMAL*/, //指定线程的优先级UINTnStackSize/*=0*/, //指定堆... 阅读全文
posted @ 2013-12-24 20:30 DoubleLi 阅读(3439) 评论(0) 推荐(2) 编辑

摘要:用户界面线程在运行时会有一个窗口界面和与其相对应的窗口函数,所以它可以通过响应消息来和用户进行交互。AfxBeginThread函数原型如下:CWinThread*AfxBeginThread(CRuntimeClass*pThreadClass,//从CWinThread派生的RUNTIME_CLASS类intnPriority/*=THREAD_PRIORITY_NORMAL*/,//指定线程的优先级UINTnStackSize/*=0*/,//定义新线程的堆栈大小DWORDdwCreateFlags/*=0*/,//为控制线程创建的附加标志LPSECURITY_ATTRIBUTESlpS 阅读全文
posted @ 2013-12-24 20:29 DoubleLi 阅读(6152) 评论(1) 推荐(1) 编辑

摘要:今天看了点关于Windows多线程的东西,摘抄点关于CloseHandle的内容放于此,以便以后参考。主要是《Windows核心编程》里的两小节:3.1.1 内核对象的使用计数 内核对象由内核所拥有,而不是由进程所拥有。换句话说,如果你的进程调用了一个创建内核对象的函数,然后你的进程终止运行,那么内核对象不一定被撤消。在大多数情况下,对象将被撤消,但是如果另一个进程正在使用你的进程创建的内核对象,那么该内核知道,在另一个进程停止使用该对象前不要撤消该对象,必须记住的是,内核对象的存在时间可以比创建该对象的进程长。 内核知道有多少进程正在使用某个内核对象,因为每个对象包含一个使用计数。使用计数是 阅读全文
posted @ 2013-12-17 20:55 DoubleLi 阅读(1614) 评论(0) 推荐(0) 编辑

摘要:一、问题的提出编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下:voidCSingleThreadDlg::OnSleepSixSecond(){Sleep(6000);//延时6秒} 编译并运行应用程序,单击“延时6秒”按钮,你就会发现在这6秒期间程序就象“死机”一样,不在响应其它消息。为了更好地处理这种耗时的操作,我们有必要学习——多线程编程。二、多线程概述 进程和线程都是操作系统的概念... 阅读全文
posted @ 2013-12-09 20:58 DoubleLi 阅读(623) 评论(1) 推荐(0) 编辑

摘要:1、创建和终止线程 在MFC程序中创建一个线程,宜调用AfxBeginThread函数。该函数因参数不同而具有两种重载版本,分别对应工作者线程和用户接口(UI)线程。 工作者线程CWinThread *AfxBeginThread( AFX_THREADPROC pfnThreadProc, //控制函数 LPVOID pParam, //传递给控制函数的参数 int nPriority = THREAD_PRIORITY_NORMAL, //线程的优先级 UINT nStackSize = 0, //线程的堆栈大小 DWORD dwCreateFlags = 0, //线程的创建标志 L.. 阅读全文
posted @ 2013-11-28 09:44 DoubleLi 阅读(1533) 评论(0) 推荐(0) 编辑

摘要:下面的代码是介绍如何在windows平台发消息到非UI线程.主要是'PeekMessage||GetMessage'这两个API的应用.当他们被调用的时候,如果当前线程还没有消息循环,就会创建一个.利用这个特性比自己手动的去创建一个消息循环要方便得多.发消息主要是使用线程PostThreadMessage#include#include#include"cassert"#include"windows.h"#include"process.h"enum{MSG_TEST=WM_USER+100,MSG_EXIT};un 阅读全文
posted @ 2013-11-21 09:05 DoubleLi 阅读(469) 评论(0) 推荐(0) 编辑

摘要:一.深入浅出Win32多线程程序设计之基本概念[转]引言 从单进程单线程到多进程多线程是操作系统发展的一种必然趋势,当年的DOS系统属于单任务操作系统,最优秀的程序员也只能通过驻留内存的方式实现所谓的"多任务",而如今的Win32操作系统却可以一边听音乐,一边编程,一边打印文档。 理解多线程及其同步、互斥等通信方式是理解现代操作系统的关键一环,当我们精通了Win32多线程程序设计后,理解和学习其它操作系统的多任务控制也非常容易。许多程序员从来没有学习过嵌入式系统领域著名的操作系统VxWorks,但是立马就能在上面做开发,大概要归功于平时在Win32多线程上下的功夫。 因此, 阅读全文
posted @ 2013-11-21 09:02 DoubleLi 阅读(1002) 评论(0) 推荐(0) 编辑

摘要:下载源代码八、线程的同步 虽然多线程能给我们带来好处,但是也有不少问题需要解决。例如,对于像磁盘驱动器这样独占性系统资源,由于线程可以执行进程的任何代码段,且线程的运行是由系统调度自动完成的,具有一定的不确定性,因此就有可能出现两个线程同时对磁盘驱动器进行操作,从而出现操作错误;又例如,对于银行系统的计算机来说,可能使用一个线程来更新其用户数据库,而用另外一个线程来读取数据库以响应储户的需要,极有可能读数据库的线程读取的是未完全更新的数据库,因为可能在读的时候只有一部分数据被更新过。 使隶属于同一进程的各线程协调一致地工作称为线程的同步。MFC提供了多种同步对象,下面我们只介绍最常用的四种.. 阅读全文
posted @ 2013-11-21 09:01 DoubleLi 阅读(452) 评论(0) 推荐(0) 编辑

摘要:下载源代码一、问题的提出编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下:void CSingleThreadDlg::OnSleepSixSecond() { Sleep(6000); //延时6秒} 编译并运行应用程序,单击“延时6秒”按钮,你就会发现在这6秒期间程序就象“死机”一样,不在响应其它消息。为了更好地处理这种耗时的操作,我们有必要学习——多线程编程。 二、多线程概述 进程和线... 阅读全文
posted @ 2013-11-21 08:59 DoubleLi 阅读(606) 评论(0) 推荐(0) 编辑

摘要:下载源代码五、MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。 工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面线程一般用于处理独立于其他线程执行之外的用户输入,响应用户及系统所产生的事件和消息等。但对于Win32的API编程而言,这两种线程是没有区别的,它们都只需线程的启动地址即可启动线程来执行任务。 在MFC中,一般用全局函数AfxBeginThread()来创建并初始化一个线程的运行,该函数有两种重载形式,分别用... 阅读全文
posted @ 2013-11-21 08:57 DoubleLi 阅读(547) 评论(0) 推荐(0) 编辑

1 2 下一页