VC6.0中C++实现线程池

Visual C++ 6.0实战编程:150个实例解析MFC与Windows经典开发 Windows桌面开发的核心在于理解其消息机制与图形界面框架。MFC(Microsoft Foundation Classes)作为经典的应用程序框架,封装了Windows SDK,通过消息映射、文档-视图架构等机制简化了开发流程。掌握MFC不仅能高效构建稳健的桌面应用,更是深入理解Windows编程原理的基石,对于维护遗留系统或学习GUI框架设计极具价值。本文聚焦于Visual C++ 6.0这一特定环境,通过大量精选实例,系统讲解了从对话框数据交换(DDX)、多线程同步到数据库访问等关键技术。针对实际开 阅读详情
在项目中,由于移动设备需要跟管理中心进行请求服务,在管理中心使用并发模式对请求进行处理(与其对应的是轮询模式),由于每次连接就需要创建一个线程对相应的请求提供服务,所以需要频繁的创建线程,而服务结束或者连接断开又需要销毁线程,这样一个过程对系统的开销很大。再加上管理中心的其它模块也需要频繁的开启和销毁线程,所以最终为了使系统更加稳定,决定加上线程池。

    但是由于之前都是在C++类中创建线程。As you see ,在C++类中创建线程是有限制的,为了使已经写好的代码维持最小改动,我将网上广为流传的线程池代码(至今没有找到一个可以顺利运行并直接使用的例子)进行了加工,使其满足我们项目的要求。现在还在测试中,到目前为止还没出现什么问题。遂上传跟大家共享,相互学习,相互交流。

    代码的讲解说明暂时还没有写,不确定大家是否需要,而且最近也比较忙,所以就偷了一下懒。

VC6.0中C++实现线程池完整工程加DLL封装下载地址:

http://download.youkuaiyun.com/detail/pinghegood/6549975(这个版本忘了封装DLL)

* 2012.12.17修改一个 bug

catch(...){

//m_functionAndParamMutex.Lock();     //可能出现死锁
TRACE0("Process Job error !");
}

*2012.12.19日修改一个bug

BOOL CWorkerThread::Terminate()
{

	//HANDLE tempHandle = GetThreadHandle();
	//TRACE0("当前线程Terminate\n");
	m_threadRunFlagMutex.Lock();
	m_threadRunFlag = FALSE;
	m_threadRunFlagMutex.Unlock();
	ResumeThread(m_ThreadHandle);
	int ret;
	ret = ::WaitForSingleObject(m_ThreadHandle,1);
	if (WAIT_OBJECT_0 != ret) //注意:需要根据返回值来确定是否应该强制结束
	{
		DWORD dwExitCode;
		GetExitCodeThread(m_ThreadHandle,&dwExitCode);
		TerminateThread(m_ThreadHandle,dwExitCode);
		::CloseHandle(m_ThreadHandle);
	}
        m_ThreadHandle = NULL;
	return TRUE;
}

2013.1.5 日:注意提交的任务函数要使用标准调用方式 WINAPI。

2013.4.1 日:修改一个bug,CThreadManage默认构造函数调用失败

                         删除CThreadManage::CThreadManage(),给带参数构造函数设置默认值。具体原因见http://blog.youkuaiyun.com/pinghegood/article/details/8745568

2013.11.14 日:修改资源不释放bug,程序中所以使用CreateMutex创建互斥变量的地方,在其析构函数中要调用ReleaseMutex。使用CreateThre

VC6兼容的轻量级C++线程池源码,含完整工程与DLL导出支持 一套专为Visual C++ 6.0环境定制的线程池实现,适用于嵌入式管理服务、工业控制等无法升级到C++11的老旧系统。通过预创建固定数量工作线程(WorkerThread),配合任务队列与线程管理器(ThreadManage)实现请求并发处理,避免频繁创建/销毁线程带来的性能损耗。代码模块清晰:Thread封装基础线程操作,ThreadMutex提供跨线程互斥保护,ThreadPoolException统一异常处理,MYDEBUG支持调试信息输出。所有头文件与实现文件严格一一对应,包含典型测试类(Tes 阅读详情

相关推荐

组态王6.5工业组态软件C++源码深度解析与VC实战项目

为统一处理电阻屏触摸(单点)、电容屏多点触控(MT)、鼠标(单点+滚轮),组态王6.5定义抽象接口:public:// 触摸按下/鼠标左键// 触摸移动/鼠标拖拽// 触摸抬起/鼠标释放// 鼠标滚轮// 多点触控MFC窗口类继承该接口,均转换为调用,彻底解耦输入源。某钢铁厂部署的21.5寸红外触摸屏,通过实现支持双指缩放趋势图,而无需修改任何画面逻辑代码。所有第三方控件必须实现COM接口:object,// 返回绘制区域、支持属性等。

weixin_29997223的博客 326

VC6.0老代码拆解:线程池与线程管理的经典实践与迁移

多线程编程是现代软件开发的基础能力,而线程的创建、复用与销毁直接决定系统性能与稳定性。线程池作为经典的并发模型,通过预创建一组工作线程并复用它们来处理任务,避免了频繁创建线程带来的开销。理解线程池的核心原理——任务队列、空闲线程分配、同步与互斥——对于优化高并发应用至关重要。在实际工程中,无论是高频短任务还是突发性长任务,都需要合理设计线程池与临时线程的配合。从一份2006年VC6.0环境下的多线程工程代码出发,深入拆解其中线程池、临时线程管理、IThreadExcute接口抽象及同步机制的设计细节,并探讨

weixin_33824385的博客 323

VC环境下C++线程池实现:从原理到性能优化实战

多线程编程中,频繁创建和销毁线程会带来巨大的系统开销,并可能引发资源竞争与内存碎片问题。线程池作为一种经典的并发模型,通过复用一组工作线程和任务队列,能够有效控制并发数量、缓冲突发任务,并实现生产者与消费者的解耦。其核心原理基于互斥锁与条件变量保护的队列,以及工作线程的循环调度机制,在服务端高并发处理、实时数据采集等场景中具有极高的工程价值。本文深入讲解了一个基于VC环境、纯Win32 API与STL实现的轻量级C++线程池,涵盖核心数据结构、接口设计、动态线程控制等关键细节,并通过性能对比展示了线程池相比

weixin_30983353的博客 91

基于C++的高效线程池设计与实现

在典型的线程池实现中,存在两个核心队列:活动任务队列(Active Task Queue):这是一个由所有工作线程共享的任务缓冲区,用于存放已被提交但尚未执行的任务对象。当外部调用者向线程池提交任务时,该任务会被封装为一个可调用对象(如),并通过线程安全的方式加入此队列。工作线程在完成当前任务后,会主动从此队列中“抢”取下一个任务继续执行。空闲线程队列(Idle Thread Queue)

weixin_42605397的博客 809

C++线程池设计与实战实例详解

今天我们从零开始,一步步构建了一个功能完整的C++线程池。但你要知道,这只是一个起点。真正的挑战在于:如何监控线程池状态?如何实现动态伸缩?如何与其他异步框架(如asio)集成?如何做到百万级任务调度不失效?这些问题没有标准答案,只有不断演进的最佳实践。正如一位资深架构师所说:“好的并发系统不是设计出来的,是被问题逼出来的。” 💡希望这篇文章能帮你少走些弯路,早点成为那个“被问题逼出来”的高手。💪🚀本文还有配套的精品资源,点击获取。

weixin_30218749的博客 615

VC6.0多线程实战:从_beginthreadex到临界区与事件同步

多线程编程是提升系统响应性与资源利用率的常用手段,但并发代码的稳定运行依赖正确的线程创建与同步机制。在Win32平台,线程创建方式直接影响CRT内部状态,使用_beginthreadex代替CreateThread能确保每线程独立数据,避免随机崩溃。同步方面,临界区适合进程内高频数据保护,互斥量可跨进程协调,而事件则用于灵活唤醒线程,这些原语的选择与使用方式是并发编程的基石。理解这些基础原理,不仅有助于维护历史遗留的VC6.0工程,也能迁移到现代C++多线程实践中。本文围绕老工程中常见的线程创建、同步原语选

weixin_33521678的博客 252

Windows(VC doc)下C语言线程池聊天室-服务器-客户端

Windows(VC6+doc)下C语言多线程聊天室,使用Socket套接字编程,具有多人聊天和私聊的功能,还支持断开重新连接,适合新手学习C语言Socket基础

VC6.0线程池

最近项目需要,就网上搜索了许多资料,最后弄了这个很精简的线程池,当然,功劳还是网上那些大牛的,我只是学习之后修改了不少地方,最后形成我需要的,代码注释很完善,有测试的主程序模块

vc6.0下实现 多线程编程的实例

特此供各位学习socket朋友参考使用 sdk6 为server sdk7为 client 应该挺好弄清楚的~~~

VC++ 线程池(ThreadPool)实现

VC++实现的线程池代码,仅供参考,如果实际项目要用必须经过大量测试。

MFC 线程池

自己做的简单的线程池 在vc6下实现 个站: www.gddhx.com

使用WSL2安装ubuntu系统并配置深度学习环境

wsl2安装ubuntu部署深度学习环境的方法

u013358093的博客 2702

通过HTTP的方式克隆GitHub上的项目

通过HTTP的方式克隆GitHub上的项目 打开想要下载的项目的网页链接,点击Clone or download绿色的按钮,进行如下步骤实现通过HTP的方式下载项目。 点击红色框圈出的位置: 打开想要存放项目的文件夹,在空白处点击鼠标右键,选择Git Bash Here,打开命令行。 输入git clone 复制的下载地址,回车进行下载。 4.正在下载的界面 5.下载完成。 技多不压身 哦耶✌✌✌ ...

weixin_37826412的博客 3204

保姆级教程:用Ansible 2.9自动化配置华为ENSP路由器(附Cloud连接避坑指南)

本文提供了一份详细的Ansible 2.9与华为ENSP路由器自动化配置教程,涵盖环境搭建、网络连通性配置、Playbook开发及典型问题排查。特别针对Cloud连接常见问题提供避坑指南,帮助运维工程师快速掌握网络自动化技能,提升工作效率。

weixin_42561476的博客 376

ESP32 DMX512与RDM协议栈开发指南

DMX512-A是专业灯光控制领域广泛采用的串行通信标准,基于RS-485物理层实现确定性单向数据传输;RDM(Remote Device Management)则在其基础上扩展双向、可寻址、可配置的智能管理能力,满足现代舞台设备远程固件升级、自动发现与参数配置需求。二者共用同一总线但时序与帧结构严格隔离,对硬件定时精度、中断响应延迟及电气隔离提出极高要求。在嵌入式实践中,ESP32凭借Wi-Fi/蓝牙连接能力与丰富外设资源,成为构建低成本智能DMX节点的理想平台。esp_dmx协议栈正是面向该场景的高性能

weixin_34945060的博客 316

STC8G1K08A的10位PWM避坑指南:为什么你的占空比调节总失效?(附寄存器操作时序图)

本文深入剖析了STC8G1K08A单片机10位PWM功能中占空比调节失效的核心原因,揭示了数据手册未明确指出的寄存器操作时序陷阱。通过对比错误与正确配置的波形,文章指出关键在于更新占空比高2位前需临时关闭PWM输出,并提供了经过验证的安全操作宏与函数库,帮助开发者彻底解决此问题,实现0%-100%的平滑控制。

yyy34的博客 748

Qt+VS集成高德红外相机SDK与OpenCV的采图实践

本文详细介绍了在Qt和Visual Studio环境中集成高德红外相机SDK与OpenCV的完整实践方案。涵盖环境配置、SDK初始化、图像采集与处理、多线程优化等关键技术点,重点解决了高德红外相机数据转换、温度信息提取和Qt界面显示优化等核心问题,为红外图像处理应用开发提供可靠参考。

palm99的专栏 645

RobotFramework二次开发——实时日志

背景基于RobotFramework的二次开发,少不了要打印实时日志出来,比如广泛应用的工具ride中,在执行用例时会把执行过程中的log全部打印出来,如果二次开发的时候,执行用例只能静默等待执行完毕,那只能算是一个半成品。结果在最后,不想看过程的可以直接跳到最后思路RobotFramework的日志有好几种,一个是执行后的log文件,这个文件可以作为数据留存,但是没办法实时获取,因为文件是在执行完

点点寒彬的博客 1万+

069、自动曝光(AE)测光策略:全局/中心/点测光与曝光时间增益分配

本文深入探讨了自动曝光(AE)测光策略的技术细节与实际应用。作者通过多个真实案例(手机前置摄像头、车载ADAS、安防监控等)分析了全局测光、中心测光和点测光的优缺点,指出不同场景应采用不同策略。重点剖析了曝光时间与增益分配的"跷跷板效应",提出要根据传感器特性选择最优分配方案。文章强调测光策略应动态调整,并给出5条实用建议:结合场景切换测光模式、关注传感器增益拐点、点测光需防抖处理、全局测光不宜迷信、调试要观察亮度直方图。最后指出AE调试需要结合具体硬件特性进行实测优化,没有通用解决方案。

zzfmlxs的博客 103

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

上一篇: 如何降低Windows程序的内存占用量
下一篇: 函数调用方式详解
fhxd
博客等级 码龄18年 63粉丝 75原创
评论 15
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值