- 博客(116)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注

原创 线程的同步
使隶属于同一个进程下的各个线程协调一致的工作成为线程同步。MFC提供了多种同步对象,如CEvent、CCriticalSection、CSemephore、CMutex等。另外,MFC也提供了线程同步辅助类CSiingleLock和CMutiLock。通过这些类,可以比较容易的做到线程同步。等待函数Win32 API提供了一组能使线程阻塞其自身执行的等待函数。这些函数只有在作为其参数的一个
2013-05-18 11:19:16
1125
转载 libcurl进行异步并发
libcurl的easy 接口,easy接口的使用非常的简单,curl_easy_init用来初始化一个easy curl对象,curl_easy_setopt对easy curl对象进行相关设置,最后curl_easy_perform执行curl请求,返回相应结果。easy接口是阻塞的,也就是说必须等到上一个curl请求执行完后,下一个curl请求才能继续执行,在一般的应用场合,...
2018-02-13 10:37:46
10091
1
转载 libcurl使用easy模式阻塞卡死等问题的完美解决---超时设置
libcurl使用时疑难问题:在使用libcurl时, jwisp发现, curl_easy_perform是阻塞的方式进行下载的, curl_easy_perform执行后,程序会在这里阻塞等待下载结束(成功结束或者失败结束).此时若正常下载一段时间后,进行网络中断, curl_easy_perform并不会返回失败,而是阻塞整个程序卡在这里,此时即使网络连接重新恢复, curl_easy_pe...
2018-02-12 15:41:48
5797
转载 使用libcurl实现put访问服务器
Libcurl为一个免费开源的,客户端curl传输库,FTP,FTPS,TFTP,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE和LDAP,跨平台,支持Windows,Unix,Linux等,线程安全,支持Ipv6。并且易于使用。 关于libcurl具体用法:1、初始化应用程序在使用libcurl之前,必须先初始化libcurl。libcurl只需初始化一次
2018-02-03 15:59:33
1217
原创 Http协议的方法讲解
HTTP协议请求相应中有8个不同的请求方法:分别是Get、POST、HEAD、PUT、DELETE、OPTIONS、TRACE和CONNECT;1. GET方法[plain] view plain copy 它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。
2018-02-03 15:49:27
1220
原创 字长对齐带来的效率提升
#include "stdafx.h"#include #pragma pack(4)struct A{ char a; int b;};#pragma pack()#pragma pack(1)struct B{ char a; int b;};#pragma pack()int main(int argc, char* arg
2018-02-03 15:29:25
352
原创 C++类大小的计算
球类占用内存大小的总结: 1)计算类大小就是计算类中的有多少个成员变量,其中静态成员变量是不占用类的大小; 2)在计算成员变量的时候编译器会根据对其原则进行处理;如: class A { void Function(); int i; char c;
2018-02-03 15:28:59
427
原创 线程的同步
使隶属于同一个进程下的各个线程协调一致的工作成为线程同步。MFC提供了多种同步对象,如CEvent、CCriticalSection、CSemephore、CMutex等。另外,MFC也提供了线程同步辅助类CSiingleLock和CMutiLock。通过这些类,可以比较容易的做到线程同步。等待函数Win32 API提供了一组能使线程阻塞其自身执行的等待函数。这些函数只有在作为其参数的一个
2018-02-03 15:28:38
236
转载 关于PBOC电子钱包的复合交易
关于PBOC电子钱包的复合交易 在PBOC2.0规范中的第九册定义了电子钱包扩展应用指南,其中有关于灰锁和复合交易的内容。在原来电子钱包的基础上进行了应用的扩展,灰锁应用主要是继承了中石化加油卡规范的理念与流程,复合交易主要面向交通领域的需求,即可以满足高速公路不停车收费(ETC)系统的需求,也可以满足城市公共交通的应用需求。对于支持复合交易的电子钱包而言,主要增加的是复合
2018-02-03 15:28:22
507
原创 curl_easy_setopt的基本选项解析
CURLcodecurl_easy_setopt(CURL *handle, CURLoption option, parameter);网络选项(NETWORK OPTIONS):1. CURLOPT_URL这个选项后面接实际要放访问Http服务器的URL地址 ,这个 URL 是一个以 '\0' 结尾的字符串;2. CURLOPT_POSTFIELDSIZE该
2018-02-03 15:26:24
17665
1
转载 LibCurl HTTP部分详细介绍
目录索引:一、LibCurl基本编程框架二、一些基本的函数三、curl_easy_setopt函数部分选项介绍四、curl_easy_perform 函数说明(error 状态码)五、libcurl使用的HTTP消息头六、获取http应答头信息七、多线程问题八、什么时候libcurl无法正常工作九、关于密码十、HTTP验证十一、代码示例 1.基本的htt
2018-02-03 15:26:14
927
转载 C++ 用libcurl库进行http 网络通讯编程
一、LibCurl基本编程框架libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。想要知道更多关于libcurl的介绍,可以到官网ht
2018-02-03 15:26:02
444
转载 CClientDC CDC CPaintDC CWindowDC 的区别
一 CClientDC CClientDC 派生于CDC 类 客户区设备上下文,其矩形区域为窗口整个客户区,客户区的左上角的坐标为(0,0),与特定的窗口相关联, 其构造函数中包含有GetDC(); 析构函数中包含有ReleaseDC(); 所以调用时直接使用,在调用完后也不用ReleaeDC();二 CPaintDC
2015-12-16 14:12:45
713
转载 VC中操作INI文件的函数
VC中操作INI文件的函数主要有:函数名功能备注GetPrivateProfileInt 读取INI文件指定块中的键名对应的整数值。 GetPrivateProfileSection记取INI文件指定块中的所有键名及其对应值。 GetPrivateProfileSectio
2015-08-19 20:48:25
761
转载 SQL Server 2008 Windows身份验证改为混合模式身份验证
由于需要,要把SQL2008单一的Windows身份验证改为混合模式身份验证。在此做一备忘。步骤:1、用Windows身份验证方式进入SQL2008,在【对象资源管理器】右键击【根目录】:选择右键菜单中的【属性】:选择【安全性】,然后勾选【Sql Server和Windows身份验证模式】,然后点击【确定】。到这里就可以断开连接退出并使用
2015-07-30 18:47:13
943
转载 C++中智能指针的设计和使用
转载请标明出处,原文地址:http://blog.youkuaiyun.com/hackbuteer1/article/details/7561235 智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露。它的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对
2015-07-28 10:46:26
525
转载 多线程中的使用共享变量的问题
一组并发线程运行在一个进程的上下文中,每个线程都有它自己独立的线程上下文,例如:栈、程序计数器、线程ID、条件码等,每个线程和其它的线程一起共享除此之外的进程上下文的剩余部分,包括整个用户的虚拟地址空间,当然也共享同样的打开的文件的集合。,这里有一点要特别注意,就是寄存器是从不共享的,而虚拟存储器总是共享的。有了共享就要防止在对共享变量进行操作的过程中得到一个不可知的值,在Linux内核中
2015-07-22 15:32:50
1307
转载 GetLastError函数使用及返回代码对照
DWORD i = ::GetLastError(); 功能:查询LoadIcon()函数返回的错误值 〖0〗-操作成功完成。 〖1〗-功能错误。 〖2〗-系统找不到指定的文件。 〖3〗-系统找不到指定的路径。 〖4〗-系统无法打开文件。 〖5〗-拒绝访问。 〖6〗-句柄无效。 〖7〗-存储控制块被损坏。 〖8〗-存储空间不足
2015-05-28 18:35:19
4193
转载 VC++ ShellExecute 执行、运行一个外部程序函数功能详解:
ShellExecute函数功能: ShellExecute 的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。函数简介: 有几个 API 函数都可以实现这些功能,但是在大多数情况下 ShellExecute 是更多的被使用的,同时它并不是太复杂。函数原型: function ShellExe
2015-05-20 11:52:20
7950
原创 数据库常见名称
sqlserver中各个系统表的作用sysaltfiles 主数据库 保存数据库的文件syscharsets 主数据库 字符集与排序顺序sysconfigures 主数据库 配置选项syscurconfigs 主数据库 当前配置选项sysdatabases 主数据库 服务器中的数据库syslanguages 主数据库 语言syslogins 主数据库 登陆帐号信息sysoledbu
2015-04-23 10:11:01
2125
转载 行情软件的实现
行情功能是CTP给的例子,本文是基于这个例子进行分析的过程。行情功能和下单功能分别集成在两个不同的动态库里面,他们的构架都差不多。都需要要一个Api对象以及一个自定义的Spi对象,并且要进行Spi的注册。不同的是下单需要提供对事件流的订阅,包括公共的和私有的数据流。而行情功能只对特定行情列表进行订阅。主函数的实现都差不多,就是那么基本的几步操作,其他的操作都需要通过Spi自定义的操
2015-04-20 15:31:48
1485
转载 CPU卡简介/CPU卡和非接触式IC卡的区别
CPU卡定义 CPU卡芯片通俗地讲就是指芯片内含有一个微处理器,它的功能相当于一台微型计算机。人们经常使用的集成电路卡(IC卡)上的金属片就是CPU卡芯片。CPU卡可适用于金融、保险、交警、政府行业等多个领域,具有 用户空间 大、读取速度快、支持一卡多用等特点,并已经通过 中国人民银行 和国家商秘委的认证。CPU卡从外型上来说和普通IC卡,射频卡并无差异,但是性能上有巨大提升
2014-10-17 10:42:54
7446
转载 VC中菜单的相关知识
MFC中与菜单相关的函数如下: AppendMenu 在指定的菜单里添加一个菜单项 CheckMenuItem 复选或撤消复选指定的菜单条目 CheckMenuRadioItem 指定一个菜单条目被复选成“单选”项目 CreateMenu 创建新菜单 CreatePopupMenu 创建一个空的弹出式菜
2014-06-17 21:55:15
894
转载 多线程的优先级处理
优先级反转对于编写应用层的人员来说不大会发生,但是对于操作系统的设计者来说确是一个逃不过去的问题。要知道怎么样处理优先级反转?那么先看看它是怎么发生的。 (1)调度队列和线程优先级 在操作系统中,线程的状态有很多种。比如说,线程的状态可能是suspend、block、ready、die几种类型。我们把所有的ready线程放在一个队列里面,这就构成了一个基本的调度队列
2014-04-03 16:54:21
1032
转载 多线程的多核编程
多核编程并不是最近才兴起的新鲜事物。早在intel发布双核cpu之前,多核编程已经在业内存在了,只不过那时候是多处理器编程而已。为了实现多核编程,人们开发实现了几种多核编程的标准。open-mp就是其中的一种。对于open-mp还不太熟悉的朋友,可以参照维基百科的相关解释。 open-mp的格式非常简单,原理也不难。它的基本原理就是创建多个线程,操作系统把这几个线程分到几
2014-04-03 16:52:26
1122
转载 多线程中的数据结构使用
要想编写多线程,那就要使用锁。而在软件编写中,数据结构是少不了的。所以,我们在编写多线程的时候,就需要考虑一下如何在数据结构中插入锁。当然,有些数据结构是没有锁的,所以自然这个锁并不一定是必须的。 比如说,我们编写一个多线程堆栈,应该怎么做呢,[cpp] view plaincopytypedef struct _STACK
2014-04-03 16:50:52
1401
转载 多线程的无锁链表
前面,为了使得写操作快速进行,我们定义了顺序锁。但是顺序锁有个缺点,那就是处理的数据不能是指针,否则可能会导致exception。那么有没有办法使得处理的数据包括指针呢?当然要是这个链表没有锁,那就更好了。 针对这种无锁链表,我们可以初步分析一下,应该怎么设计呢? (1)读操作没有锁,那么怎么判断读操作正在进行呢,只能靠标志位了; (2)写操作没有锁
2014-04-03 16:48:58
1513
转载 多线程的顺序锁
在互斥数据访问中有一种多读少写的情况。正对这么一种情形,我们也提出了读写锁的方案。但是呢,这个锁有些缺陷。什么缺陷呢?那就是,这个写锁需要在所有的读锁完成之后才能写。否则的话,写锁需要这么一直等下去。 那么,有没有什么办法能使得写操作快速一点进行呢?那就是顺序锁。[cpp] view plaincopytypedef struc
2014-04-03 16:47:48
924
转载 多线程的无锁队列
对于编写多线程的朋友来说,队列具有天生的互斥性。在队列里面,一个负责添加数据,一个负责处理数据。谁也不妨碍谁,谁也离不开谁。所以,队列具有天生的并行性。[cpp] view plaincopy#define MAX_NUMBER 1000L #define STATUS int #define OK 0 #defin
2014-04-03 16:45:16
874
转载 多线程的调试
软件调试是我们软件开发过程中的重要一课。在前面,我们也讨论过程序调试,比如说这里。今天,我们还可以就软件调试多讲一些内容。比如说条件断点,数据断点,多线程断点等等。[cpp] view plaincopy#include int value = 0; void test() { int total;
2014-04-03 16:44:22
685
转载 避免多线程死锁
预防死锁的注意事项:(1)在编写多线程程序之前,首先编写正确的程序,然后再移植到多线程(2)时刻检查自己写的程序有没有在跳出时忘记释放锁(3)如果自己的模块可能重复使用一个锁,建议使用嵌套锁(4)对于某些锁代码,不要临时重新编写,建议使用库里面的锁,或者自己曾经编写的锁(5)如果某项业务需要获取多个锁,必须保证锁的按某种顺序获取,否则必定死锁(6)编写简
2014-04-03 16:43:17
627
转载 多线程的死锁
相信有过多线程编程经验的朋友,都吃过死锁的苦。除非你不使用多线程,否则死锁的可能性会一直存在。为什么会出现死锁呢?我想原因主要有下面几个方面: (1)个人使用锁的经验差异 (2)模块使用锁的差异 (3)版本之间的差异 (4)分支之间的差异 (5)修改代码和重构代码带来的差异 不管什么原因,死锁的危机都是存在的。那么,通常出现的死锁都有
2014-04-03 16:41:41
541
转载 多线程的嵌套锁
嵌套锁这个概念,主要是为了根据编程中的一种情形引申出来的。什么情况呢,我们可以具体说明一下。假设你在处理一个公共函数的时候,因为中间涉及公共数据,所以你加了一个锁。但是,有一点比较悲哀。这个公共函数自身也加了一个锁,而且和你加的锁是一样的。所以,除非你的使用的是信号量,要不然你的程序一辈子也获取不了这个锁。[cpp] view plaincopy
2014-04-03 15:53:00
1110
转载 多线程的读写锁
在编写多线程的时候,有一种情况是十分常见的。那就是,有些公共数据修改的机会比较少。相比较改写,它们读的机会反而高的多。通常而言,在读的过程中,往往伴随着查找的操作,中间耗时很长。给这种代码段加锁,会极大地降低我们程序的效率。那么有没有一种方法,可以专门处理这种多读少写的情况呢? 有,那就是读写锁。 (1)首先,我们定义一下基本的数据结构。[cpp
2014-04-03 15:51:21
740
转载 多线程的原子锁
原子锁是多线程编程中的一个特色。然而,在平时的软件编写中,原子锁的使用并不是很多。这其中原因很多,我想主要有两个方面。第一,关于原子锁这方面的内容介绍的比较少;第二,人们在编程上面习惯于已有的方案,如果没有特别的需求,不过贸然修改已存在的代码。毕竟对很多人来说,不求有功,但求无过。保持当前代码的稳定性还是很重要的。 其实,早在《多线程数据互斥》这篇博客中,我们就已经介绍过原子锁。本篇
2014-04-03 15:50:04
837
转载 多线程的C++锁
编写程序不容易,编写多线程的程序更不容易。相信编写过多线程的程序都应该有这样的一个痛苦过程,什么样的情况呢?朋友们应该看一下代码就明白了,[cpp] view plaincopyvoid data_process() { EnterCriticalSection(); if(/* error
2014-04-03 15:49:03
751
转载 多线程的自旋锁
自旋锁是SMP中经常使用到的一个锁。所谓的smp,就是对称多处理器的意思。在工业用的pcb板上面,特别是服务器上面,一个pcb板有多个cpu是很正常的事情。这些cpu相互之间是独立运行的,每一个cpu均有自己的调度队列。然而,这些cpu在内存空间上是共享的。举个例子说,假设有一个数据value = 10,那么这个数据可以被所有的cpu访问。这就是共享内存的本质意义。 我们可以看一段L
2014-04-03 15:34:49
735
转载 多线程的数据互斥
在多线程存在的环境中,除了堆栈中的临时数据之外,所有的数据都是共享的。如果我们需要线程之间正确地运行,那么务必需要保证公共数据的执行和计算是正确的。简单一点说,就是保证数据在执行的时候必须是互斥的。否则,如果两个或者多个线程在同一时刻对数据进行了操作,那么后果是不可想象的。 也许有的朋友会说,不光数据需要保护,代码也需要保护。提出这个观点的朋友只看到了数据访问互斥的表象。在程序的运行
2014-04-03 15:17:08
618
转载 多线程同步说明
多线程创建其实十分简单,在windows系统下面有很多函数可以创建多线程,比如说_beginthread。我们就可以利用它为我们编写一段简单的多线程代码,[cpp] view plaincopy#include #include #include unsigned int value = 0; v
2014-04-03 15:09:34
525
转载 多线程基础
多线程编程是现代软件技术中很重要的一个环节。要弄懂多线程,这就要牵涉到多进程?当然,要了解到多进程,就要涉及到操作系统。不过大家也不要紧张,听我慢慢道来。这其中的环节其实并不复杂。 (1)单CPU下的多线程 在没有出现多核CPU之前,我们的计算资源是唯一的。如果系统中有多个任务要处理的话,那么就需要按照某种规则依次调度这些任务进行处理。什么规则呢?可以是一些简
2014-04-03 15:06:52
724
Oralce基本知识点
2013-03-19
条件判断与条件预处理
2014-06-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人