自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 资源 (1)
  • 收藏
  • 关注

原创 C++ 头文件的包含与编译优化

写C++程序时,不要头文件中包含太多其他的头文件,除非绝对必要。 通常我们在头文件中声明类,在cpp文件中实现该类的函数。如果成员函数的参数是别的类的声明或引用,则可能会直接包含该类的声明对应的头文件。举个例子:我定义两个类:A(分别对应的文件A.h,A.cpp)和B(分别对应的文件B.h,B.cpp),,像这种情况下,假如A类A.h中有个成员函数声明:void fun( ...

2013-11-30 19:27:55 1639

转载 Win32多线程之同步机制摘要

Critical Section      Critical Section(临界区)用来实现“排他性占有”。适用范围是单一进程的各线程之间。它是:          1)一个局部性对象,不是一个核心对象;           2)快速而由效率。           3)不能够同时有一个以上的critical section被等待;           4)无法侦测是否已被某个

2013-11-28 22:40:17 497

转载 Win32多线程之Interlocked Variables

同步机制的最简单类型就是使用interlocked 函数,对着标准的32位变量进行操作。这些函数并没有提供“等待”机能,它们只是保证对某个特定变量的存取操作时“一个一个按顺序来”。  考虑一下,如果你需要维护一个32位计数器的“排他性 存取”性质,你该怎么做?你可能会产生一个critical section或一个mutex,拥有它,然后进行你的操作,然后再释放拥有权,一个32位变量的存取操作只

2013-11-28 22:22:37 740

原创 Linux 系统快捷键初学

1.使用TAB键是一个很好的习惯:双击TAB键,        1)若TAB键接在一串指令的第一个字的后面则为命令补全;        2)若TAB接在一串指令的第二个字之后, 则为档案补齐。2.Ctrl + C 中可以中断当前的程序3.Ctrl + D 相当于exit4.上下方向键:提示之前输入的指令

2013-11-27 23:06:36 574

原创 AnsiString 一些函数的用法

1.大写转小写    :  UpperCase(); 2.小写转大写:  LowerCase();3.获得字符串长度:Length();4.查询某个子串:  Pos( const AnsiString& strSub );//返回值大于1表示查询成功(备注:若要查询某个字符是否在AnsiString串中,没有相应的函数,只有将该字符转换成AnsiString串,然后

2013-11-27 18:24:24 1157

转载 Win32多线程之事件(Event Objects)

Win32中最具弹性的同步机制就属events对象了。Event是一种核心对象,  他的唯一目的就是成为激发状态或者未激发状态。这两种状态完全由程序来控制,  不会成为Wait...()函数的副作用。    Event对象之所以大有用途,正是因为它们的状态完全在你的控制之下。Mutexes和semaphores就不一样了。它们的状态会因WaitForSingleObject()之类

2013-11-25 22:20:37 2016

转载 Win32多线程之信号量(Semaphores)

信号量是解决各种生产者/消费者问题的关键要素。这种问题会存在一个缓冲区,可能在同一时间内被读出数据或被写入数据。   Win32中的一个semaphore可以被锁住最多n次,其中n是semaphore被产生时指定的。n常常被设计用来代表“可以锁住一份资源”的线程个数,不过并非单独一个线程就不能够拥有所有的锁定,这没什么理由可言。    理论上可以证明,mutex是semaphore的一种退

2013-11-24 21:45:08 1041

原创 NotePad++ 正则表达式

使用NotePad++进行正则表达式的字符串替换,下面是一些特例:1.将所有行合并为一行  查找目标: \r\n  替换为:空值。2.删除空行  查找目标: ^[ \t]*\r\n  替换为:空值

2013-11-24 18:21:50 593

原创 Linux指令学习

最近开始学习Linux,把常用指令记录下来,以备查看。  1.查看所有进程:           ps  -ef      若要查看指定的指令:    ps  -ef|grep    process_name           2.显示当前目录下的文件: ls     ls   -l       ls    -al     ls   -dl 3.切换到自定目录  cd

2013-11-24 17:11:39 438

原创 UE运行可执行程序

UE通过工具配置来运行可执行程序,具体方法如下:  1.选择 “高级->工具配置”,弹出工具配置对话框;  2.在菜单名称栏里填入名称(根据个人喜好来填);  3.在命令行里填入如下内容:    可执行文件名称(包含路径)参数   %n%e  其中,可执行文件名称如果包含空格,则必须用双引号将整个路径包含,参数是你的可执行文件支持的参数,%n%e代表当前要处理的文件(也

2013-11-24 11:44:14 2359

转载 Win32多线程之互斥器(Mutexes)

Win32的Mutex用途和critical section非常类似,但是它牺牲速度以增加弹性,或许你已经猜到了。mutex 是MUTual EXclusion的缩写。一个时间内只能够有一个线程拥有mutex,就好像同一时间内只能够有一个线程进入同一个critical section一样。  虽然mutex和critical section做同样的事情,但是它们的运作还是有差别的:  1)

2013-11-23 15:42:12 1221

转载 Win32多线程之死锁(DeadLock)

为每一个链表(linked list)准备一个critical section之后(关于链表,请参看”Win32多线程之临界区(Critical Sections)“),我却开始了另一个问题。请看下面这个用来交换两个链表内容的函数:void SwapLists(List  *listA, List * listB){     List   *tmp_list;     Ente

2013-11-23 00:46:07 889

转载 Win32多线程之最小锁定时间

在任何关于同步机制的讨论中,不论是在Win32或Unix或其他操作系统,你一定会一再地听到这样一条规则: 不要长时间锁住一份资源   如果你一直让资源被锁定,你就会阻止其他线程的执行,并把整个程序带到一个完全停止的状态。以critical sectin 来说,当某个线程进入critical section时,该项资源即被锁定。   我们很难定义所谓”长时间“是多少,如果你在网络

2013-11-23 00:18:10 647

转载 Win32多线程之临界区(Critical Sections)

Win32之中最容易使用的一个同步机制就是 critical sections。所谓critical sections意思是指一小块“用来处理一份呗共享的资源”的程序代码。这里所谓的资源,并不是指.res(资源文件)的Windows资源,而是广义上地指一块内存,一个数据结构,一个文件,或任何其他具有“使用之排他性”的东西。也就是说,“资源”每一次(同一时间内)只能够被一个线程处理。  你可能必

2013-11-22 23:37:52 1475

转载 Win32多线程之同步控制

写多线程程序的一个最具挑战性的问题就是,如何让一个线程和另一个线程合作。除非你让它们同心协力。否则必然会出现“race conditions”(竞争条件)和“data corrupton”(数据被破坏)的情况。    在典型的办公室文化中,协调工作是由管理者来执行的。类似的解决方案,也就是“让某个线程成为大家的老板”。当然可以在软件中实现出来,但是每逢它们需要指挥时,就要它们排队等待,其实有着

2013-11-21 22:44:15 647

转载 Win32多线程之标准消息循环

Windows程序中的标准消息循环看起来如下所示:while(GetMessage(&msg, NULL, 0, 0) ){      TranslateMessage(&msg);      DispatchMessage(&msg);}    GetMessage()有点像是特殊版本的WaitForSingleObject(),它等待消息而不是核

2013-11-21 22:27:00 1197

转载 Win32多线程之WaitForMultipleObjects

Win32函数中的WaitForMultipleObjects()允许你在同一时间等待一个以上的对象。你必须将一个由handles组成的数组交给此函数,并指定要等待其中一个对象或是全部的对象,下面就是这个函数的原型:DWORD WaitForMultipleObjects(DWORD nCount,const HANDLE* lpHandles,BOOL bWa

2013-11-21 21:54:37 1773

转载 Win32多线程之被激发的对象(Signaled Objects)

核心对象在“Win32多线程之核心对象”已经讲过,如文件,进程,互斥器(Mutexes)等。这些对象的状态都可能是线程关心的东西。信号量(semaphores)和互斥器(mutexes)可以记录红绿灯状态,文件对象可以告诉我们一个I/O操作何时完成。线程对象则可以告诉我们它何时结束(当线程结束时,它出于激发状态)。         线程可以使用像WaitForSingleobject()这样的

2013-11-20 21:57:23 915

转载 Win32多线程之等待一个线程的结束(WaitForSingleObject)

由于线程停工是操作系统的责任,当然操作系统也有责任让其他线程知道某个线程停工了。   Win32提供了一个名为WaitForSingleObject()的函数。他的第一个参数是个核心对象(如线程)的handle,为了方便讨论,我把即将等待的线程称为线程#1,把正在执行的线程称为线程#2。刚刚说的“线程核心对象”指的是线程#2。  调用WaitForSingleObject()并放置一个“线

2013-11-20 21:31:18 1907

转载 Win32多线程之性能监视器

Windows系统任务管理器中,”性能“属性页中,可以查看CPU和内存的使用情况。它因此成为了一个重要的工具,用以确定我们所写的程序有预期的行为。当你启动一个程序时,如果CPU的利用率达到100%并且在该处停留很久,这就说明你的程序可能有个busy loop。

2013-11-19 23:09:43 763

转载 Win32多线程之线程等待

等待是线程常常需要做的事情。当你读取用户的输入,或是存取磁盘文件时,你的线程必须等待因为磁盘存取速度和用户输入动作的速度是CPU速度的百万(甚至)分之一。等待是线程的一种必要之恶。    等待技术:     1.Win32 Sleep()函数。这个函数要求操作系统终止线程动作,直到渡过某个指定时间之后才恢复。虽然很简单,但好似实际上你却不可能事先知道什么事情要等待多久。即使一个可以快速完成

2013-11-19 22:55:15 996

转载 Win32多线程之后台线程

后台线程和主线程完全分开。它使用不同的数据结构,并且是非交谈式的。任何东西如果要画在屏幕上,都必须送出一个消息给主线程(GUI线程),告诉它去做这件事情。

2013-11-19 22:37:19 733

转载 Win32多线程之设计多线程程序需要注意的问题

1.简单和安全大于复杂和速度;程序与线程的关系越紧密,越容易产生错误并引起race condition。

2013-11-19 22:32:24 577

转载 Win32多线程之多线程设计成功的关键

多线程设计成功的关键是:1.各线程的数据要分离开来,避免使用全局变量;2.不要在线程之间共享GDI对象;3.确保你知道各线程的状态,不要径自结束程序而不等待各个线程的结束;4.让主线程处理用户界面(GUI)。

2013-11-18 22:44:51 645

转载 Win32多线程之微软的多线程模型

Win32说明文件一再强调线程分为GUI线程和worker线程两种。GUI线程负责建造窗口以及处理主消息循。worker线程负责执行纯粹的运算工作,如重新计算或重新编页等等,它们会导致主线程的消息队列失去反应,一般而言,GUI线程绝对不会去做哪些不能够马上完成的工作。   GUI线程的定义是:拥有消息队列的线程,任何一个特定窗口的消息总是被产生这一窗口的线程抓到并处理。所有对该窗口的改变也都应

2013-11-18 22:16:16 798

转载 Win32多线程之错误处理

经验显示,线程的各种相关函数是错误高危险群,而适当的错误处理可以阻止挫败并产生一个比较可信赖的程序。

2013-11-18 22:03:53 603

转载 Win32多线程之主线程

主线程:   程序启动后就执行的那个线程称为主线程(primary thread)。主线程有两个特点:     第一,它不许负责GUI(Graphic User Interface)程序中的主消息循环;     第二,这一线程结束(不论是因为返回或因为调用了ExitThread())会使得程序中的所有线程都被迫结束。程序也因此而结束,其它线程没有机会做清理工作。   这是C r

2013-11-18 21:58:57 929

转载 Win32多线程之ExitThread

VOID ExitThread(DWORD dwExitCode);dwExitCode: 指定该线程的结束代码返回值: 无返回值。  这个函数有点像C runtime library中的exit()函数。因为它可以在任何时候被调用并且绝不会返回。任何代码放在此行之下,保证不会被执行。

2013-11-18 21:45:24 1000

转载 Win32多线程之GetExitCodeThread

BOOL GetExitCodeThread(    HANDLE hThread,    LPDWORD lpExitCode);参数hThread  :由CreateThread()传回的线程handlelpExitCode:指向一个DWORD, 用以接收结束代码(exit code)返回值: 如果成功,GetExitCodeThread()传回TRUE,否

2013-11-18 21:38:35 1794 2

转载 Win32多线程之线程对象与线程

线程的handle是指向“线程核心对象”,而不是指向线程本身,对大部分API而言,这项差异没什么影响。当你调用CloseHandle()并给予它一个线程handle时,你只不过是表示,你希望自己和次核心对象不再有任何瓜葛。CloseHandle()唯一做的事情就是把引用计数减一。如果该值变成0,对象会自动被操作系统摧毁。   “线程核心对象”引用到的那个线程也会令核心对象开启。因此,线程对象的

2013-11-16 23:54:33 699

转载 Win32多线程之核心对象

CreateThread()传回两个值,用以识别一个新的线程。第一个值是个Handle,  这也是CreateThread()的返回值,大部分与线程有关的API函数都需要它。第二个值是由lpThreadId带回来的线程ID。线程ID是一个全局变量,可以独一无二地表示系统中任一进程中的某个线程。AttachThreadInput()和PostThreadMessage()就需要用到线程ID,这两

2013-11-16 23:38:24 808

转载 Win32多线程之多线程的特点

1.多线程程序是无法预测其行为的。2.线程的执行顺序无法保证。3.线程对于晓得改变有高度的敏感。4.线程并不总是立即启动。

2013-11-16 22:47:26 630

转载 Win32多线程之CreateThread

1.CreateThread   产生一个线程(并因而成就一个多线程程序),是以CreateThread()作为一切行动的开始,次函数的原型如下:HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,  SIZE_T dwStackSize,  LPTHREAD_START_ROUTINE lpStartAd

2013-11-16 01:37:36 4225

转载 Win32多线程之线程的优缺点

使用线程并非没有代价,使用线程可能会引发数个潜在的严重的问题。除非经过小心设计,多线程程序有着不可预期,测试困难的倾向。   如果你曾经在厨房与别人共事过,你知道,有时候人多反而麻烦。如果你们都做同一件事情,你就必须不断和另一个说话,找出什么已经做了什么还没做;如果两个人做完全不同的事情,情况会比较好一些。即使这样,还是会有问题发生,因为厨房的资源有限,你们必须得先计划好,先了解谁用那个器具那

2013-11-16 00:58:41 755

转载 Win32多线程之线程之间的通信

线程之间如何通信?       一个和race  conditions很有关系的问题就是,线程通信问题。一个线程要有大用途,你i必须告诉它做什么事情。Win32提供了一个简单的方法,供应线程的启动(start-up)信息。但是两个线程间的交谈就十分棘手了,线程怎么知道数据要放在哪里?       最明显的答案就是放在全局变量中。因为所有的线程都可以对它进行读写。但是如果线程A写下一个全局变

2013-11-16 00:47:47 971

转载 Win32多线程之原子操作

严密阻止race condition的发生是必要的。 困难点在于鉴定出race condition的发生地点。长时间在高级语言如C/C++之中打滚的你,或许已经忘了CPU是在非常低阶中操作。当你思考race condition时,如果忽略‘’低阶‘这件事,可能会造成难以去除的bug。    一个操作如果能够不受中断地完成,我们称之为(原子操作)atomic operation。

2013-11-16 00:39:28 1294

转载 Win32多线程之竞争条件(Race Conditions)

Context switching 是抢先式多任务的心脏。在一个合作型多任务系统中,操作系统必须得到程序的允许才能够改变线程。但是在抢先式多任务系统中,控制权被强制转移,也因此两个线程之间的执行次序变得不可预期,这不可预期性便造成了所谓的race conditions(竞争条件)。

2013-11-16 00:32:39 709

转载 Win32多线程之线程上下文切换(Context Switching)

在一个抢先式多任务系统中,操作系统小心地确保每一个线程都有机会执行。他依赖硬件的协助以及许多的簿记工作。当硬件计时器认为某个线程已经执行够久了,就会发出一个中断,于是CPU取得目前这个线程的当前状态,即把所有寄存器的内容拷贝到堆栈之中,再把它从堆栈拷贝到一个CONTEXT结构(这样便储存了线程的状态)中,以备以后在用。     要切换不谈的线程,操作系统应先切换该线程所隶属的进程的内存

2013-11-14 22:07:40 1390

转载 Win32多线程之为什么不使用多进程

人们一旦接触到线程,他们最常问的问题就是:有什么是线程能够给我而多进程所不能给我的?言下之意就是,线程又怎么样!最重要的答案便是:线程价廉,线程启动比较快,退出比较快,对系统资源的冲击也比较小,而且,线程彼此分享了大部分核心对象(如 file handles)的拥有权。   如果使用多重进程,最困难的问题大概是:如何把窗口的handle交给另一个进程,在Win32中,handle只在其诞生地(

2013-11-03 12:10:22 1239

C语言写的带有头结点的链表

这是一个带有头结点的链表,实现了链表的创建,翻转和销毁。并在main()函数中举例测试。

2013-04-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除