×

windows如何多线程

windows如何多线程(windows多线程api)

admin admin 发表于2023-03-24 21:07:08 浏览58 评论0

抢沙发发表评论

本文目录一览:

Windows多线程

线程体不必显式的调用endthread函数,直接让他return即可,在线程体返回的时候,会自动调用endthread函数,并且将线程内核对象的引用计数减1,如果你显式的调用了endthread,可能会造成线程内核对象的引用计数多减了一次1,那么当你再次启动它的时候,引用计数+1,但是却是0,因此没有被启动。。

个人意见,未经证实。

俺使用VC,所以俺都是使用CreateThread函数来启动线程的,对于beginthead,据说和CreateThread差不多,而且CreateThread也会调用beginthread,但是beginthread确实没有深入研究过。。。-windows如何多线程

如何在Windows下编写基于Posix标准的多线程程序

在Windows下编写基于Posix标准的多线程程序的方法:

1、进入pthread-win32开源库官网,单击pthread-win32-2-9-1-release.zip进行下载

2、下载后的文件解压缩后,进行二次开发只需要里面的Pre-built.2文件夹里面的内容

Pre-built.2文件夹下面有:dll(程序运行时需要的动态运行时库),

include(程序编写时利用的头文件),

lib(程序连接过程中需要的静态库)

3、建立code blocks下的C工程,工程结构,包括main.c测试代码

codeblocks的工程配置,右键工程名选择build options,配置linker settings,与search direction里面的compiler选项

编写main.c,代码如下:

#include "pthread.h"#include stdio.hvoid* func(void * Parame){ printf("I am Child Thread\n"); return NULL;}int main(){ printf("Pthread Test Begin\n");-windows如何多线程

pthread_t pid; pthread_attr_t attr;

pthread_attr_init(attr); pthread_attr_setscope(attr, PTHREAD_SCOPE_PROCESS);

pthread_attr_setdetachstate(attr, PTHREAD_CREATE_DETACHED);

pthread_create(pid, attr, func, NULL); getchar(); pthread_attr_destroy(attr);

return 0;}

在生成的exe文件所在同级目录下应该自己添加前文所说的dll文件,否则无法运行。

“多线程”的原理是什么?

多线程概述

进程和线程都是操作系统的概念。进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。-windows如何多线程

线程是进程内部的一个执行单元。系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说main或WinMain函数,将程序的启动点提供给Windows系统。主执行线程终止了,进程也就随之终止。-windows如何多线程

每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。每个线程具有自己的堆栈和自己的 CPU 寄存器副本。其他资源(如文件、静态数据和堆内存)由进程中的所有线程共享。所以线程间的通讯非常方便,多线程技术的应用也较为广泛。但是使用这些公共资源的线程必须同步。Win32 提供了几种同步资源的方式,包括信号、临界区、事件和互斥体。-windows如何多线程

每个进程都有私有的虚拟地址空间,进程的所有线程共享同一地址空间。每个线程被CPU分配一个时间片,一旦被激活,它正常运行直到时间片耗尽并被挂起,此时,操作系统选择另一个线程进行运行。通过时间片轮转,又出于各个时间片很小(20毫秒级),看起来就像多个线程同时在工作。实际上,只有在多处理器系统上才是真正的在可得到的处理器上同时运行多个线程。基于Win32的应用程序可以通过把给定进程分解(或创建)多个线程挖掘潜在的CPU时间,而且还可以加强应用程序,以使用户提高效率,加强反应能力以及进行后台辅助处理。-windows如何多线程

在Windows操作系统中,Win32应用程序可以在Windows平台上运行多个实例,每个应用程序实例都是一个独立的进程,而一个进程可以由不止一个线程来实现。对于一个进程来说,当应用程序有几个任务要同时运行时,建立多个线程是有用的。如打印时,利用多线程机制实现多线程,就可在需要打印时创建一个负责完成打印功能的打印线程。创建打印线程之后,系统就变成了多线程。当进行打印时,CPU轮换着分配给这两个线程时间片,所以打印和其他功能一起同时在运行,这就充分利用了CPU处理打印工作之外的空闲时间片,并且避免了用户长久地等待打印时间。这就是所谓的由多线程来实现的多任务,在进行打印任务的同时又可以进行别的任务。要说明的一点是,目前大多数的计算机都是单处理器(CPU)的,为了运行所有这些线程,操作系统为每个独立线程安排一些CPU时间,操作系统以轮换方式向线程提供时间片,这就给人一种假象,好象这些线程都在同时运行。由此可见,如果两个非常活跃的线程为了抢夺对CPU的控制权,在线程切换时会消耗很多的CPU资源,反而会降低系统的性能。这一点在多线程编程时应该注意。-windows如何多线程

Win32 SDK函数支持进行多线程的程序设计,并提供了操作系统原理中的各种同步、互斥和临界区等操作。Visual C++ 6.0中,使用MFC类库也实现了多线程的程序设计,线程被分为工作者线程(Worker Thread)和用户界面线程(User Interface Thread)两大类。前者常用于处理后台任务,执行这些后台任务并不会耽搁用户对应用程序的使用,即用户操作无需等待后台任务的完成。后者常用来独立的处理用户输入和相应用户的事件。其中用户界面线程的特点是拥有单独的消息队列,可以具有自己的窗口界面,能够对用户输入和事件做出响应。在应用程序中,根据用户界面线程具有消息队列这一特点,可以使之循环等待某一事件发生后再进行处理。由于Windows95时抢先式多任务的操作系统,即使一个线程因等待某事件而阻塞,其他线程仍然可以继续执行。-windows如何多线程