zoukankan      html  css  js  c++  java
  • 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 
    ",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>.
    ");
    	printf("Press any other key to exit .
    ");
    
    	while (1)
    	{
    		int c = getc(stdin);
    		if (c == '
    ')
    		{
    			continue;
    		}
    		if (c<'0'||c>'9')
    		{
    			break;
    		}
    		SetEvent(threadArgs[c - '0'].hTerminate);
    	}
    	return 0;
    }
    
    
    


     

  • 相关阅读:
    小米面试之股票收益最大
    第三周:同时管理64位和32位版本的Python,并用Pyinstaller打包成exe
    第三周 anaconda的安装
    第二周:python实现线性回归(哑变量回归)的高效方法
    第一周:在python里调用C文件中函数
    13G:神奇的数列
    13F:图像分割
    13E:吃奶酪
    13D:拖延症
    13B:回文子串
  • 原文地址:https://www.cnblogs.com/wuyida/p/6301392.html
Copyright © 2011-2022 走看看