进程的阻塞和挂起

本文通过两个具体的示例介绍了线程管理中的线程阻塞与挂起的概念及应用。阻塞线程示例展示了如何让主线程等待子线程完成任务;挂起线程示例则演示了如何创建并控制线程的状态,包括挂起和恢复运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     在线程管理中,线程的阻塞和挂起其实都是等待。即触发一个事件或等待一时间在执行。当然这两者的实现模式不一样。在这里,显示一下我们上课的例子,了解线程的阻塞和挂起的的使用

   1.线程的阻塞

    

/*
  阻塞线程
*/
#include<windows.h>
#include<iostream>

using namespace std;

struct Point
{
	int x,y,z;
};
DWORD WINAPI threadStartPoint(LPVOID data)
{
	Sleep(2000);
	Point* p = (Point*)data;
	cout<<"shuchu: "<<p->x<<"\t"<<p->y<<"\t"<<p->z<<endl;
	cout<<"thread job done"<<endl;
	return 0;
}
int main()
{
	DWORD threadID;
	Point p;
	p.x = 2;
	p.y = 3;
	p.z = 4;

	HANDLE handle  = CreateThread(0,0,
		threadStartPoint,
		(LPVOID)&p,
		0,&threadID);
	//Sleep(2000);
	if(!handle)
	{
		cout<<"failed"<<endl;
	}
	else
	{
		cout<<"start on threadid="<<threadID<<endl;
	}
	WaitForSingleObject(handle, 2000 );
	cout<<"main thread exiting..."<<endl;

	return 0;
}

 2.线程的挂起


 

/*
  挂起线程例子 
*/
#include<windows.h>
#include<iostream>

using namespace std;

DWORD WINAPI ThreadProc(LPVOID lpParam)
{
	LPDWORD pData;
	DWORD i = 0;
	pData = (LPDWORD)lpParam;
	for(i; i < 10; i++)
	{
		Sleep(100);
		cout<<"TID = "<<GetCurrentThread()<<",Parameters = "<<*pData<<",i="<<i<<endl;

	}
	ExitThread(i);
	return 0;
}

int main()
{
	DWORD dwData_1;
	DWORD dwData_2;
	DWORD dwThreadID[2];
	HANDLE hThread[2];
	dwData_1 = 1;
	dwData_2 = 2;
	//创建挂起线程
	hThread[0] = CreateThread(
		NULL,0,
		ThreadProc,&dwData_1,
		CREATE_SUSPENDED,
		&dwThreadID[0]);
	if(hThread[0] == NULL)
	{
		ExitProcess(0);
	}
	//创建普通线程
		hThread[1] = CreateThread(
		NULL,0,
		ThreadProc,&dwData_2,
		0,
		&dwThreadID[1]);
	if(hThread[1] == NULL)
	{
		ExitProcess(0);
	}
	//休眠 
	Sleep(200);
	//启动0
	ResumeThread(hThread[0]);
	//挂起1
	SuspendThread(hThread[1]);
	//正好500会造成少输入一次
	Sleep(550);
	//输出五次就停止
	TerminateThread(hThread[0],0);
	//启动1
	ResumeThread(hThread[1]);
	//
	WaitForMultipleObjects(2, hThread, TRUE, INFINITE);
	//关闭句柄
	CloseHandle(hThread[0]);
	CloseHandle(hThread[0]);

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值