首页 > 代码库 > 使用强制性的手段来结束一个进程

使用强制性的手段来结束一个进程

VOID ExitThread(

DWORD dwExitCode);

dwExitCode  指定此线程之结束代码

没有返回值

这函数有点像C runtime library中的exit()函数,因为他可以在任何时候调用并且绝不会返回。任何代码若放在此行之下,保证不会被执行。

#define WIN32_LEAN_AND_MEAN

#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>


DWORD WINAPI ThreadFunc(LPVOID);
void AnotherFunc(void);
int main()
{
	HANDLE hThrd;
	DWORD exitCode = 0;
	DWORD threadId;

	hThrd = CreateThread(NULL,
		0,
		ThreadFunc,
		(LPVOID)1,
		0,
		&threadId);
	if (hThrd)
	{
		printf(" Thread launched\n");
	}
	for(;;)
	{
		BOOL rc;
		rc = GetExitCodeThread(hThrd,&exitCode);
		if (rc && exitCode != STILL_ACTIVE)
			break;
	}
	CloseHandle(hThrd);

	printf("Thread returned %d\n",exitCode);

	return EXIT_SUCCESS;
}


DWORD WINAPI ThreadFunc(LPVOID n)
{  
	printf("Thread running\n");
	AnotherFunc();
	return 0;
}

void AnotherFunc()
{
	printf("About to exit thread\n");
	ExitThread(4);

	printf("This will never printf\n");
}
技术分享

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

使用强制性的手段来结束一个进程