win32 线程通信初步

 

 

// 线程通信机制.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#define  NUM_THREADS 10
#include <windows.h>
#include <stdio.h>
#include <process.h>

typedef struct
{
 int Id;
 HANDLE hTerminate;

}ThreadArgs;

unsigned __stdcall ThreadFunc(void *pArgs)
{
	HANDLE hTerminate = ((ThreadArgs *)pArgs)->hTerminate;//参数转换
	int id = ((ThreadArgs *)pArgs)->Id;

	//运行到我们被告知需要终止的时候
	while(1)
	{
		//检查我们是否需要终止
		if(WaitForSingleObject(hTerminate,0) == WAIT_OBJECT_0)
		{
			//终止线程--我们调用ResetEvent来讲终止的线程返回到非激发状态之后,推出while循环
			printf("Terminating Thread %d \n",id);
			ResetEvent(hTerminate);
			break;
		}
		
		//我们现在可以处理我们的工作,模拟这个情况,假设工作需要1秒钟来做线程需要做的工作

		Sleep(1000);

	}

	_endthreadex(0);

	return 0;

}

int main(int argc ,char * argv[])
{
	unsigned int threadID[NUM_THREADS];
	HANDLE hThread[NUM_THREADS];
	ThreadArgs threadArgs[NUM_THREADS];

	//创建10个线程 
	for(int i =0 ; i < NUM_THREADS ; i++)
	{
		threadArgs[i].Id = i;
		threadArgs[i].hTerminate = CreateEvent(NULL, TRUE, FALSE, NULL);
		hThread[i] = (HANDLE)_beginthreadex(NULL, 0, &ThreadFunc, &threadArgs[i], 0, &threadID[i]);
	}

	printf("To kill a thread (gracefully), press 0-9, then <Enter>.\n");
	printf("Press any other key to exit .\n");

	while (1)
	{
		int c = getc(stdin);
		if (c == '\n')
		{
			continue;
		}
		if (c<'0'||c>'9')
		{
			break;
		}
		SetEvent(threadArgs[c - '0'].hTerminate);
	}
	return 0;
}



 

转载于:https://www.cnblogs.com/wuyida/p/6301392.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值