win32 线程通信初步

简介:     // 线程通信机制.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#define NUM_THREADS 10#include #include #include typedef struct{ int Id; HAN...

 

 

// 线程通信机制.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;
}



 

相关文章
|
15天前
|
存储 Java 数据库连接
java多线程之线程通信
java多线程之线程通信
|
1月前
|
Python
如何在Python中实现线程之间的同步和通信?
【2月更文挑战第17天】【2月更文挑战第51篇】如何在Python中实现线程之间的同步和通信?
|
4月前
|
Java
线程间通信之Object.wait/notify实现
线程间通信之Object.wait/notify实现
30 0
|
4月前
|
消息中间件 存储 Unix
进程间通信和线程间通信总结
写在前面 面试的时候一定不要疲劳战,比如上午面了一个,然后中午不休息直接赶到另外一个相距比较远的公司,影响状态。 面试的时候一定不要紧张,不管对方有几个人,总之面试的时候做好充分准备,休息好,放松心态。 好了,言归正传,开始总结。
39 0
|
6月前
|
安全 Java 调度
Java多线程编程的默契对话:线程通信的艺术
Java多线程编程的默契对话:线程通信的艺术
38 0
|
5月前
19.3 Boost Asio 多线程通信
多线程服务依赖于两个通用函数,首先`boost::bind`提供了一个高效的、简单的方法来创建函数对象和函数对象适配器,它的主要功能是提供了一种将函数和它的参数绑定到一起的方法,这种方法可以将具有参数的成员函数、普通函数以及函数对象转化为不带参数的函数对象。当参数绑定后则下一步就需要使用多线程功能,Boost库中提供了`boost::thread`库,`boost::thread`可以用于创建线程、启动线程、等待线程执行结束以及线程间通信等多种操,有了这两个关键库那么我们只需要`accept.accept(*sock)`等待套接字上线,当有套接字上线后则自动创建`MyThread`子线程,
47 0
19.3 Boost Asio 多线程通信
|
4月前
|
安全 Java 数据库连接
详细介绍线程间通信
详细介绍线程间通信 线程间通信是指在多线程编程中,不同的线程之间通过某种方式交换信息的过程。这是一个重要的概念,因为线程之间的协作是实现复杂并发系统的关键。 下面是一些线程间通信的常见方式和示例:
353 0
|
1月前
|
消息中间件 并行计算 网络协议
探秘高效Linux C/C++项目架构:让进程、线程和通信方式助力你的代码飞跃
探秘高效Linux C/C++项目架构:让进程、线程和通信方式助力你的代码飞跃
34 0
|
1月前
|
存储 Java 数据库连接
线程通信(CountDownLatch、CyclicBarrier、Semaphore、Exchanger)
线程通信(CountDownLatch、CyclicBarrier、Semaphore、Exchanger)
34 0
|
1月前
|
安全
多线程通信
多线程通信