
基础
文章平均质量分 93
dhc566
这个作者很懒,什么都没留下…
展开
-
vs2010 静态库以及动态库编译实例
最近在研究ffmpeg,由于用c#开发,而ffmpeg采用的是c开发,因此打算先用c将ffmpeg的一些函数封装成库,在用c#来调用,花了一天时间(确实水平太低)写了几个vs2010下的静态库以及动态库的编译实例。一、vs2010下静态库编译(1)、编译静态库 先建一个空的visual c++ 的win32项目,选择应用程序类型为静态库,然后传一个static.h头文件以及转载 2015-07-29 17:13:14 · 794 阅读 · 0 评论 -
多线程二 多线程中的隐蔽问题揭秘
上一篇《多线程一 CreateThread与_beginthreadex本质区别》中讲到一个多线程报数功能。为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是否运行出错。这也非常类似于统计一个网站每天有多少用户登录,每个用户登录用一个线程模拟,线程运行时会将一个表示计数的变量递增。程序在最后输出计数的值表示有今天多少个用户登录,如果这个值不等于我们启动的线程个数,那显然说明这个转载 2015-08-14 11:38:22 · 387 阅读 · 0 评论 -
线程与进程的区别
1、线程的基本概念 概念:线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。 好处 :(1)易于调度。 (2)提高转载 2015-08-14 11:48:47 · 419 阅读 · 0 评论 -
多线程三 经典线程同步之关键段CS
1、本文首先介绍下如何使用关键段,然后再深层次的分析下关键段的实现机制与原理。定义关键段变量:CRITICAL_SECTION g_csThreadParameter, g_csThreadCode;关键段CRITICAL_SECTION一共就四个函数,使用很是方便。下面是这四个函数的原型和使用说明。1)函数原型:void InitializeCriticalSection转载 2015-08-14 11:43:11 · 362 阅读 · 0 评论 -
多线程一 CreateThread与_beginthreadex的本质区别
1、尽量使用_beginthreadex()来代替使用CreateThread(),为什么? _beginthreadex()函数在创建新线程时会分配并初始化一个_tiddata块。这个_tiddata块自然是用来存放一些需要线程独享的数据。事实上新线程运行时会首先将_tiddata块与自己进一步关联起来。然后新线程调用标准C运行库函数如strtok()时就会先取得_tidda转载 2015-08-14 11:22:51 · 504 阅读 · 0 评论 -
多线程八 生产者消费者经典问题
继经典线程同步问题之后,我们来看看生产者消费者问题及读者写者问题。生产者消费者问题是一个著名的线程同步问题,该问题描述如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个具有多个缓冲区的缓冲池,生产者将它生产的产品放入一个缓冲区中,消费者可以从缓冲区中取走产品进行消费,显然生产者和消费者之间必须保持同步,即不允许消费者到一个空的缓冲区转载 2015-08-14 11:47:51 · 648 阅读 · 0 评论 -
多线程六 经典线程同步之信号量Semaphore
1、首先来看看如何使用信号量 信号量Semaphore常用有三个函数,使用很方便。下面是这几个函数的原型和使用说明。第一个 CreateSemaphore函数功能:创建信号量函数原型:HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG l转载 2015-08-14 10:32:27 · 493 阅读 · 0 评论 -
多线程五 经典线程同步之事件Event
1、首先介绍下如何使用事件。 事件Event实际上是个内核对象,它的使用非常方便。下面列出一些常用的函数。1)第一个 CreateEvent函数功能:创建事件函数原型:HANDLE CreateEvent(LPSECURITY_ATTRIBUTESlpEventAttributes,BOOLbManualReset,BOOLbI转载 2015-08-14 11:44:47 · 458 阅读 · 0 评论 -
多线程四 经典线程同步之互斥量Mutex
1、互斥量是一个内核对象,它用来确保一个线程独占一个资源的访问。 互斥量与关键段的行为非常相似,并且互斥量可以用于不同进程中的线程互斥访问资源。使用互斥量Mutex主要将用到四个函数。下面是这些函数的原型和使用说明。1)第一个 CreateMutex函数功能:创建互斥量(注意与事件Event的创建函数对比)函数原型:HANDLE CreateMutex转载 2015-08-14 11:43:59 · 434 阅读 · 0 评论 -
多线程经典面试题
1、基本概念 详见:线程和进程关系和区别、同步和互斥、进程间通信2、以下多线程对int型变量x的操作,哪几个不需要进行同步(D) A. x=y; B. x++; C. ++x; D. x=1; 详见:多线程二 多线程中的隐蔽问题揭秘3、多线程中栈与堆是公有的还是私有的 (C)转载 2015-08-14 11:50:03 · 393 阅读 · 0 评论 -
Windows API ——CreateMutex——创建互斥对象
互斥对象是系统内核维护的一种数据结构,它保证了对象对单个线程的访问权 互斥对象的结构:包含了一个使用数量,一个线程ID,一个计数器 使用数量是指有多少个线程在调用该对象,线程ID是指互斥对象维护的线程的ID 计数器表示当前线程调用该对象的次数 HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes, 安全属转载 2015-08-14 09:41:43 · 452 阅读 · 0 评论 -
CreateEvent的用法
事件对象就像一个开关:它只有两种状态---开和关。当一个事件处于”开”状态,我们称其为”有信号”否则称为”无信号”。可以在一个线程的执行函数中创建一个事件对象,然后观察它的状态,如果是”无信号”就让该线程睡眠,这样该线程占用的CPU时间就比较少。产生事件对象的函数如下: HANDLE CreateEvent( LPSECURITY_ATTRIBUTE转载 2015-08-14 09:46:54 · 524 阅读 · 0 评论 -
联合(union)用法
联合(union)在C/C++里面见得并不多,但是在一些对内存要求特别严格的地方,联合又是频繁出现,那么究竟什么是联合、怎么去用、有什么需要注意的地方呢?就这些问题,我试着做一些简单的回答,里面肯定还有不当的地方,欢迎指出! 1、什么是联合? “联合”是一种特殊的类,也是一种构造类型的数据结构。在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该转载 2015-07-20 14:16:27 · 565 阅读 · 0 评论 -
C++基础:动态链接库调用方法总结
虽说在08年就学习了静态库,动态链接库的使用方法,但是在最近的工作中才发现,动态链接库的动态调用(也叫显式调用)我是可以运用了,但是静态调用(也叫隐式调用)我其实还是没有掌握,这次就借这个机会把动态库的两种用法再熟悉一下。(一)先回顾一下,动态链接库和静态链接库 静态链接库:lib中的函数不仅被连接,全部实现都被直接包含在最终生成的EXE文件中,只是实现是不可见的。转载 2015-07-29 17:11:36 · 583 阅读 · 0 评论 -
多线程七 经典线程同步与互斥总结
前面《多线程二 多线程中的隐蔽问题揭秘》提出了一个经典的多线程同步互斥问题,这个问题包括了主线程与子线程的同步,子线程间的互斥,是一道非常经典的多线程同步互斥问题范例,后面分别用了四篇《多线程三 经典线程同步之关键段CS》《多线程四 经典线程同步之互斥量Mutex》《多线程五 经典线程同步之事件Event》《多线程六 经典线程同步之信号量Semaphore》转载 2015-08-14 11:46:40 · 533 阅读 · 0 评论