如何关闭当前线程的类加载器加载的所有线程

如何关闭当前线程的类加载器加载的所有线程,第1张

让当前正在运行的子线程停止的所有方法1任何一个线程调用exit2pthread_exit3pthread_kill4pthread_cancel下面我们一一分析各种终止正在运行的程序的方法任何一个线程调用exit任何一个线程只要调用了exit都会导致进程结束,各种子线程当然也能很好的结束了,可是这种退出会有一个资源释放的问题我们知道当一个进程终止时,内核对该进程所有尚未关闭的文件描述符调用close关闭,所以即使用户程序不调用close,在终止时内核也会自动关闭它打开的所有文件。没错,标准C++IO流也会很好的在exit退出时得到flush并且释放资源,这些东西并不会造成资源的浪费(系统调用main函数入口类似于exit(main(argc,argv)))表面上似乎所有的问题都能随着进程的结束来得到很好的处理,其实并不然,我们程序从堆上分配的内存就不能得到很好的释放,如new,delete后的存储空间,这些空间进程结束并不会帮你把这部分内存归还给内存

这个必须在线程内部自己实现,可以借助一个线程安全的共享变量作为标记位。线程外部将对应变量设置为true的时候,运行线程监测到就继续,反之则进入wait()状态,直到线程外部使用notify将其唤醒。

HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
DWORD dwStackSize, // initial stack size
LPTHREAD_START_ROUTINE lpStartAddress, // thread function
LPVOID lpParameter, // thread argument
DWORD dwCreationFlags, // creation option
LPDWORD lpThreadId // thread identifier
);
VOID ExitThread(
DWORD dwExitCode // exit code for this thread
);

你好,首先不建议你通过强行关闭线程的方式来结束音乐,你可能不知道,有个函数PlaySound可以已不播放,其用法如下:PlaySound("音乐位置",NULL,SND_ASYNC),这个函数结束起来也非常方便,PlaySound(NULL,NULL,NULL)就OK了,至于你关闭线程的问题

解释此问题,我们先从什么是进程开始
进程是指在系统中正在运行的一个应用程序;线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元。对于 *** 作系统而言,其调度单元是线程。一个进程至少包括一个线程,通常将该线程称为主线程。一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所谓基于多线程的多任务。
那进程与线程的区别到底是什么?进程是执行程序的实例。例如,当你运行记事本程序(Nodepad)时,你就创建了一个用来容纳组成Notepadexe的代码及其所需调用动态链接库的进程。每个进程均运行在其专用且受保护的地址空间内。因此,如果你同时运行记事本的两个拷贝,该程序正在使用的数据在各自实例中是彼此独立的。在记事本的一个拷贝中将无法看到该程序的第二个实例打开的数据。
以沙箱为例进行阐述。一个进程就好比一个沙箱。线程就如同沙箱中的孩子们。孩子们在沙箱子中跑来跑去,并且可能将沙子攘到别的孩子眼中,他们会互相踢打或撕咬。但是,这些沙箱略有不同之处就在于每个沙箱完全由墙壁和顶棚封闭起来,无论箱中的孩子如何狠命地攘沙,他们也不会影响到其它沙箱中的其他孩子。因此,每个进程就象一个被保护起来的沙箱。未经许可,无人可以进出。
实际上线程运行而进程不运行。两个进程彼此获得专用数据或内存的唯一途径就是通过协议来共享内存块。这是一种协作策略。下面让我们分析一下任务管理器里的进程选项卡。
这里的进程是指一系列进程,这些进程是由它们所运行的可执行程序实例来识别的,这就是进程选项卡中的第一列给出了映射名称的原因。请注意,这里并没有进程名称列。进程并不拥有独立于其所归属实例的映射名称。换言之,如果你运行5个记事本拷贝,你将会看到5个称为Notepadexe的进程。它们是如何彼此区别的呢?其中一种方式是通过它们的进程ID,因为每个进程都拥有其独一无二的编码。该进程ID由Windows NT或Windows 2000生成,并可以循环使用。因此,进程ID将不会越编越大,它们能够得到循环利用。 第三列是被进程中的线程所占用的CPU时间百分比。它不是CPU的编号,而是被进程占用的CPU时间百分比。此时我的系统基本上是空闲的。尽管系统看上去每一秒左右都只使用一小部分CPU时间,但该系统空闲进程仍旧耗用了大约99%的CPU时间。
第四列,CPU时间,是CPU被进程中的线程累计占用的小时、分钟及秒数。请注意,我对进程中的线程使用占用一词。这并不一定意味着那就是进程已耗用的CPU时间总和,因为,如我们一会儿将看到的,NT计时的方式是,当特定的时钟间隔激发时,无论谁恰巧处于当前的线程中,它都将计算到CPU周期之内。通常情况下,在大多数NT系统中,时钟以10毫秒的间隔运行。每10毫秒NT的心脏就跳动一下。有一些驱动程序代码片段运行并显示谁是当前的线程。让我们将CPU时间的最后10毫秒记在它的帐上。因此,如果一个线程开始运行,并在持续运行8毫秒后完成,接着,第二个线程开始运行并持续了2毫秒,这时,时钟激发,请猜一猜这整整10毫秒的时钟周期到底记在了哪个线程的帐上?答案是第二个线程。因此,NT中存在一些固有的不准确性,而NT恰是以这种方式进行计时,实际情况也如是,大多数32位 *** 作系统中都存在一个基于间隔的计时机制。请记住这一点,因为,有时当你观察线程所耗用的CPU总和时,会出现尽管该线程或许看上去已运行过数十万次,但其CPU时间占用量却可能是零或非常短暂的现象,那么,上述解释便是原因所在。上述也就是我们在任务管理器的进程选项卡中所能看到的基本信息列。
最基本的系统进程
[编辑本段]
也就是说,这些进程是系统运行的基本条件,有了这些进程,系统才能正常运行!
最基本的系统进程列表:
smssexe Session Manager
csrssexe 子系统服务器进程
winlogonexe 管理用户登录
servicesexe 包含很多系统服务
lsassexe 管理 IP 安全策略以及启动 ISAKMP/Oakley (IKE) 和 IP 安全驱动程序。(系统服务)
产生会话密钥以及授予用于交互式客户/服务器验证的服务凭据(ticket)。(系统服务)
svchostexe 包含很多系统服务
svchostexe
SPOOLSVEXE 将文件加载到内存中以便迟后打印。(系统服务)
explorerexe 资源管理器
internatexe 托盘区的拼音图标
附加的系统进程(这些进程不是必要的,你可以根据需要通过服务管理器来增加或减少):
mstaskexe 允许程序在指定时间运行。(系统服务)
regsvcexe 允许远程注册表 *** 作。(系统服务)
winmgmtexe 提供系统管理信息(系统服务)。
inetinfoexe 通过 Internet 信息服务的管理单元提供 FTP 连接和管理。(系统服务)
tlntsvrexe 允许远程用户登录到系统并且使用命令行运行控制台程序。(系统服务)
允许通过 Internet 信息服务的管理单元管理 Web 和 FTP 服务。(系统服务)
tftpdexe 实现 TFTP Internet 标准。该标准不要求用户名和密码。远程安装服务的一部分。(系统服务)
termsrvexe 提供多会话环境允许客户端设备访问虚拟的 Windows 2000 Professional 桌面会话以及运行在服务器上的基
于 Windows 的程序。(系统服务)
dnsexe 应答对域名系统(DNS)名称的查询和更新请求。(系统服务)
以下服务很少会用到,上面的服务都对安全有害,如果不是必要的应该关掉
tcpsvcsexe 提供在 PXE 可远程启动客户计算机上远程安装 Windows 2000 Professional 的能力。(系统服务)
支持以下 TCP/IP 服务:Character Generator, Daytime, Discard, Echo, 以及 Quote of the Day。(系统服务)
ismservexe 允许在 Windows Advanced Server 站点间发送和接收消息。(系统服务)
upsexe 管理连接到计算机的不间断电源(UPS)。(系统服务)
winsexe 为注册和解析 NetBIOS 型名称的 TCP/IP 客户提供 NetBIOS 名称服务。(系统服务)
llssrvexe License Logging Service(system service)
ntfrsexe 在多个服务器间维护文件目录内容的文件同步。(系统服务)
RsSubexe 控制用来远程储存数据的媒体。(系统服务)
locatorexe 管理 RPC 名称服务数据库。(系统服务)
lserverexe 注册客户端许可证。(系统服务)
dfssvcexe 管理分布于局域网或广域网的逻辑卷。(系统服务)
clipsrvexe 支持“剪贴簿查看器”,以便可以从远程剪贴簿查阅剪贴页面。(系统服务)
msdtcexe 并列事务,是分布于两个以上的数据库,消息队列,文件系统,或其它事务保护资源管理器。(系统服务)
faxsvcexe 帮助您发送和接收传真。(系统服务)
cisvcexe Indexing Service(system service)
dmadminexe 磁盘管理请求的系统管理服务。(系统服务)
mnmsrvcexe 允许有权限的用户使用 NetMeeting 远程访问 Windows 桌面。(系统服务)
netddeexe 提供动态数据交换 (DDE) 的网络传输和安全特性。(系统服务)
smlogsvcexe 配置性能日志和警报。(系统服务)
rsvpexe 为依赖质量服务(QoS)的程序和控制应用程序提供网络信号和本地通信控制安装功能。(系统服务)
RsEngexe 协调用来储存不常用数据的服务和管理工具。(系统服务)
RsFsaexe 管理远程储存的文件的 *** 作。(系统服务)
grovelexe 扫描零备份存储(SIS)卷上的重复文件,并且将重复文件指向一个数据存储点,以节省磁盘空间。(系统服务)
SCardSvrexe 对插入在计算机智能卡阅读器中的智能卡进行管理和访问控制。(系统服务)
snmpexe 包含代理程序可以监视网络设备的活动并且向网络控制台工作站汇报。(系统服务)
snmptrapexe 接收由本地或远程 SNMP 代理程序产生的陷阱消息,然后将消息传递到运行在这台计算机上 SNMP 管理程序
。(系统服务)
UtilManexe 从一个窗口中启动和配置辅助工具。(系统服务)
msiexecexe 依据 MSI 文件中包含的命令来安装、修复以及删除软件。(系统服务)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13330684.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-16
下一篇 2023-07-16

发表评论

登录后才能评论

评论列表(0条)

保存