
[12] Windows进程与线程
文章平均质量分 68
Windows环境下的进程线程操作
m_buddy
大表哥,还有大招吗... PS:本人所有文章均免费公开,任何收费条目请咨询平台
展开
-
Windows进程通信——创建线程
1. 概述在Windows环境下创建线程使用的方法主要由如下几种:CreateThread:CreateThread是Windows的API函数,提供操作系统级别的创建线程的操作,且仅限于工作者线程。不调用MFC和RTL的函数时,可以用CreateThread,其它情况不要轻易使用。在使用的过程中要考虑到进程的同步与互斥的关系(防止死锁)。beginthread,beginthread原创 2017-06-08 11:47:54 · 668 阅读 · 0 评论 -
线程死锁的原因和解决办法
前言死锁问题是多线程特有的问题,它可以被认为是线程间切换消耗系统性能的一种极端情况。在死锁时,线程间相互等待资源,而又不释放自身的资源,导致无穷无尽的等待,其结果是系统任务永远无法执行完成。死锁问题是在多线程开发中应该坚决避免和杜绝的问题。1. 线程死锁的原因(1)互斥条件:一个资源每次只能被一个线程使用。(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放原创 2017-07-16 17:11:08 · 11985 阅读 · 0 评论 -
Windows进程线程相关概念
1. 进程的运行状态C++中进程运行的三个状态:阻塞、运行、就绪阻塞:在某些外部事件发生前,该进程不能运行运行:进程正在使用CPU就绪:进程可执行,但是它暂时停止让其他进程运行运行和就绪状态有些类似。处于这两种状态的进程都可以运行,只是在就绪状态中,进程暂时没有CPU可用。阻塞装填就与前两种状态不同,在阻塞状态中,即使CPU空闲,进程也不能运行。2. 进程与线程的关原创 2017-06-04 16:07:20 · 1122 阅读 · 0 评论 -
Windows进程通信——剪贴板
1. 概述1.1 介绍剪贴板(Clipped Board)实质是Win32 API中一组用来传输数据的函数和消息,为Windows应用程序之间进行数据共享提供了一个中介,Windows已建立的剪切(复制)-粘贴的机制为不同应用程序之间共享不同格式数据提供了一条捷径。当用户在应用程序中执行剪切或复制操作时,应用程序把选取的数据用一种或多种格式放在剪贴板上。然后任何其它应用程序都可以从剪贴板上原创 2017-06-07 15:36:59 · 7060 阅读 · 1 评论 -
Windows进程通信——WM_COPYDATA消息
1. 概述WM_COPYDATA是一种非常强大却鲜为人知的消息。当一个应用向另一个应用传送数据时,发送方只需使用调用SendMessage函数,参数是目的窗口的句柄、传递数据的起始地址、WM_COPYDATA消息。接收方只需像处理其它消息那样处理WM_COPY DATA消息,这样收发双方就实现了数据共享。WM_COPYDATA是一种非常简单的方法,它在底层实际上是通过文件映射来实现的。它的原创 2017-06-06 17:22:58 · 2005 阅读 · 0 评论 -
Windows进程通信——命名管道
1. 概述命名管道是通过网络来完成进程之间的通信的,命名管道依赖于底层网络接口,其中包括有 DNS 服务,TCP/IP 协议等等机制,但是其屏蔽了底层的网络协议细节,对于匿名管道而言,其只能实现在父进程和子进程之间进行通信,而对于命名管道而言,其不仅可以在本地机器上实现两个进程之间的通信,还可以跨越网络实现两个进程之间的通信。命名管道使用了 Windows 安全机制,因而命名管道的服务端可原创 2017-06-05 22:40:15 · 1580 阅读 · 0 评论 -
Windows进程通信——内存映射
1. 概述1.1 介绍文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待。因此,进程不必使用文件I/O操作,只需简单的指针操作就可读取和修改文件的内容。Win32 API允许多个进程访问同一文件映射对象,各个进程在它自己的地址空间里接收内存的指针。通过使用这些指针,不同进程就可以读或修改文件的内容,实现了对文件中数据的共享。应原创 2017-06-06 12:01:17 · 1107 阅读 · 0 评论 -
Windows进程间通信方法——共享内存
1. 概述Win32 API中共享内存(Shared Memory)实际就是文件映射的一种特殊情况。进程在创建文件映射对象时用0xFFFFFFFF来代替文件句柄(HANDLE),就表示了对应的文件映射对象是从操作系统页面文件访问内存,其它进程打开该文件映射对象就可以访问该内存块。由于共享内存是用文件映射实现的,所以它也有较好的安全性,也只能运行于同一计算机上的进程之间。2. 编码2.1...原创 2019-12-14 10:46:59 · 3657 阅读 · 0 评论 -
Windows进程通信——Socket通信
1. 概述Windows Sockets规范是以U.C.Berkeley大学BSD UNIX中流行的Socket接口为范例定义的一套Windows下的网络编程接口。除了Berkeley Socket原有的库函数以外,还扩展了一组针对Windows的函数,使程序员可以充分利用Windows的消息机制进行编程。现在通过Sockets实现进程通信的网络应用越来越多,这主要的原因是Sockets的原创 2017-06-06 14:35:32 · 2014 阅读 · 0 评论 -
Windows创建进程
1. WinExrc()函数这个函数还存在是为了兼容一千老式的16位机而存在的,它的函数原型为:UINT WINAPI WinExec( _In_ LPCSTR lpCmdLine, _In_ UINT uCmdShow);参数解析:lpCmdLine:是命令行参数,也就是使用exe的文件路径和后面的命令行参数uCmdShow:窗口显示的风格,参数的含义可以参考原创 2017-06-04 17:59:55 · 4759 阅读 · 0 评论 -
Windows进程管理
1. 概述这篇博客将主要讲进程的管理,主要涉及到打开进程(OpenProcess()函数)、终止进程(TerminateProcess()函数)、对当前进程进行权限修改(OpenProcessToken(), AdjustTokenPrivileges()函数)、窗口查找(FindWindow()函数)。接下来就将使用这些函数实现对进程的打开和关闭操作。2. 进程操作2.1 打开进程原创 2017-06-04 21:52:57 · 1574 阅读 · 1 评论 -
Windows进程通信——匿名管道
1. 概述匿名管道是在本地机器上使用,实现父进程和子进程之间的通信的进程通信机制。需要注意两点:(1)就是在本地机器上,这是因为匿名管道不支持跨网络之间的两个进程之间的通信(2)实现的是父进程和子进程之间的通信,而不是任意的两个进程,因为需要继承父进程的读写管道句柄匿名管道的作用之一是输出重定向,也就是如下面的图中所示的功能上面红色框框中文本是在DOS窗口下输出的,原创 2017-06-05 15:10:18 · 4120 阅读 · 0 评论 -
Windows线程同步——信号量对象
1. 概述信号量内核对象用来对资源计数。与其他所有内核对象相同,它们也包含一个使用计数,但它们还包含另外两个32位值:一个最大资源和一个当前资源计数。最大资源计数表示信号量可以控制的最大资源,当前资源技术表示当前可用资源。信号量的规则如下:(1)如果当前资源计数大于0,那么信号量处于触发状态(2)如果当前资源计数等于0,那么信号量属于未触发状态(3)系统绝对不会让当前资源计数变原创 2017-06-18 16:07:50 · 1006 阅读 · 0 评论 -
Windows线程同步——互斥量对象
1. 概述当两个或更多线程需要同时访问一个共享资源时,为了保证程序的正常运行,需要保证同一个资源在同一时刻只能有一个线程去访问它。Mutex 是同步基元,它只向一个线程授予对共享资源的独占访问权。如果一个线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,直到第一个线程释放该互斥体。互斥量与关键段(线程同步方式)的行为完全相同,当互斥量是内核对象,而关键段是用户模式下的的同步对象。互斥原创 2017-06-17 22:07:02 · 1153 阅读 · 0 评论 -
Windows线程同步——临界区对象
1. 概述如果有多个线程试图同时访问临界区,那么在有一个线程进入临界区后,其他试图访问的线程将被挂起,直到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到对临界区的互斥访问。(临界区中一般都是一个简短的代码段)在WINDOWS中,临界区是一种应用层的同步对象,非内核对象。对于这句话的解释是这样的:临界区(Critical Section)是Win32中提供的一种轻量级的原创 2017-06-17 16:37:12 · 1813 阅读 · 0 评论 -
Windows线程管理和调度机制概述
1. 线程管理线程,有时被称为轻量级进程,是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针,寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。既然线程作为程序执行流的最小单元,那么在Windows中,对于线程的管理和调度线程是这原创 2017-06-16 00:15:00 · 10410 阅读 · 0 评论 -
Windows中多线程‘饥饿’浅谈
前言饥饿:如果一个线程因为 CPU 时间全部被其他线程抢走而得不到 CPU 运行时间,这种状态被称之为“饥饿”。1. 饥饿产生的原因(1)其它线程吞噬所有的 CPU 时间。(2)线程被永久堵塞在一个等待进入同步块的状态,因为其他线程总是能在它之前持续地对该同步块进行访问。2. 饥饿怎么处理(1)首先,系统调度依据优先级来选择线程,但是如果优先级较低的线程长期不能得到原创 2017-07-25 16:18:14 · 1782 阅读 · 0 评论