首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

老版VC++线程池

一般的设计中,当需要一个线程时,就创建一个,但是当线程过多时可能会影响系统的整体效率,这个性能的下降主要体现在:当线程过多时在线程间来回切换需要花费时间,而频繁的创建和销毁线程也需要花费额外的机器指令...,同时某些时候极少数线程可能就可以处理大量,比如http服务器可能只需要几个线程就可以处理用户发出的http请求,毕竟相对于用户需要长时间来阅读网页来说,CPU只是找到对应位置的页面返回即可。...通过控制线程数量从而减少了CPU的线程切换,而且用完的线程还到线程池而不是销毁,下一次再用时直接从池中取,某种程度上减少了线程创建与销毁的消耗,从而提高效率 Windows上,使用线程池十分简单...windows上主要有四种线程池 1. 普通线程池 2. 同步对象等待线程池 3. 定时器回调线程池 4....下面来依次说明各种线程池的使用: 普通线程池 普通线程池使用时主要是调用QueueUserWorkItem函数将回调函数加入线程池队列,线程池中一旦有空闲的线程就会调用这个回调,函数原型如下: BOOL

1.4K30

VC++编写ActiveX控件

,里面涉及一个响应用PLC的采集信息的问题(PLC用串口和工控机相连接),然后思考如何用C#写串口通讯程序,结果师兄一旁直接用VC++写了一个“*.ocx控件”,并在自己的电脑上进行了测试,完工后就把生成的...说到跨语言的模块化程序设计,本文之前发表的一篇《VC++的DLL应用(含Demo演示)》中讲了dll的创建方法,用户可以将一些公用函数放在dll源文件中,然后编译生成一个dll文件,供程序动态加载连接并调用里面的函数...最后VC++会自动生成一些文件,这些文件就构成了ActiveX的基本模板,文件的主要结构如下:     直接编译一下,然后Debug目录下面就会生成一个名为“ocxDemo.ocx”的控件注册文件,...总述:通过“类向导”工具,为控件添加属性、方法和事件后,VC++会自动相应的文件里面生成代码,比如内部方法属性和外部方法属性之间的映射,消息的建立,消息的声明,等等。...3.2.1 通过VC++调用      利用VC6.0建立一个MFC的基本对话框应用程序      完成程序向导后。执行下面的步骤: 1.

3.3K30

VC++ IPv6的支持

几个例子 因为IPV6 不能再像V4那样直接往地址结构中填写IP了,因此IPV6的场合需要大量使用getaddrinfo函数,来根据具体的IP字符串或者根据主机名来自动获取地址信息,然后根据地址信息直接调用...当然写入的时候按照这几种方式写入,为了方便写入IP地址,微软定义了一个宏: #define s_addr S_un.S_addr 因此填入IP地址的时候可以简单的使用这个宏来给S_addr这个共用体成员赋值...sockaddr_in6 该结构类似于sockaddr_in,只不过它表示的是IPV6的地址信息,使用上,由于IPV6是128的地址占16个字节,而sockaddr_in 中表示地址的部分只有4个字节..., 所以它与之前的两个是不能转化的,使用IPV6的时候需要特殊的处理,一般不直接填写IP而是直接根据IP的字符串或者主机名来连接。...但是WinSock中更常用的是WSAAddressToString 与 WSAStringToAddress INT WSAAddressToString( LPSOCKADDR lpsaAddress

1.3K20

VC++平台上的内存对齐操作

我们知道当内存的边界正好对齐相应机器字长边界上时,CPU的执行效率最高,为了保证效率,VC++平台上内存对齐都是默认打开的,32位机器上内存对齐的边界为4字节;比如看如下的代码: struct MyStruct...MyStruct)<<endl; return 0; } 此时输出的结果并不是sizeof(int) + sizeof(char) = 5而是8,因为内存对齐的原因,将char分配为4个字节效率更高; VC...平台上我们可以通过预处理指令:#pragma pack(show)来查看当前内存对齐的方式,我们代码前加上一句#pragma pack(show),再次编译,在编译器的“生成”窗口中看到一个警告:“warning...MyStruct)<<endl; system("PAUSE"); return 0; } 这个时候得到结果为5,也就是说我们已经将对齐方式改为了1; 除了这个预处理指令我们也可以通过VC

74230

VC++消息钩子编程「建议收藏」

当在某个程序中安装钩子后,它将监视该程序的消息,指定消息还没到达窗口之前钩子程序先捕获这个消息。这样就有机会对此消息进行过滤,或者对Windows消息实现监控。...卸载钩子有两种方法: (1)、结束掉安装钩子的进程 将设置钩子的进程结束,进程退出之前会自行卸载掉该进程安装的所有消息钩子。...但是如果病毒系统进程中注入代码而安装的钩子,这样钩子句柄就位于系统进程中,我们不可以结束系统进程,这时就只能获取这个消息钩子句柄,然后调用函数卸载。...如何枚举稍后讲解,还要解决一个问题,就是枚举过程中,我们怎么知道哪个句柄是病毒安装的呢?...再次反汇编该函数的实现可以看出,不同操作系统下该函数的最后三行代码如下。

69820

VC++ 崩溃处理以及打印调用堆栈

title: VC++ 崩溃处理以及打印调用堆栈 tags: [VC++, 结构化异常处理, 崩溃日志记录] date: 2018-08-28 20:59:54 categories: windows...高级编程 keywords: VC++, 结构化异常处理SEH, 崩溃日志记录 --- 我们程序发布后总会面临崩溃的情况,这个时候一般很难重现或者很难定位到程序崩溃的位置,之前有方法程序崩溃的时候记录...系统每个线程的堆栈环境中都维护了一个SEH表,表中是用户注册的异常类型以及它对应的处理函数,每当用户函数中注册新的异常处理函数,那么这个信息会被保存在链表的头部,也就是说它是采用头插法来插入新的处理函数...,从这个角度上来说,我们可以很容易理解为什么一般的高级语言中一般会先找与try块最近的catch块,然后找它的上层catch,由里到外依次查找。...获取到对应的符号表位置后有这样的代码 if (NULL !

3.4K40
领券