开发者社区> season雅宁> 正文

win32多线程学习笔记

简介: 《多核程序设计技术》 第五章——线程api,一个使用windows事件的线程应用程序,vs2008下编译调试通过。 // 线程通信机制.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.
+关注继续查看

《多核程序设计技术》

第五章——线程api,一个使用windows事件的线程应用程序,vs2008下编译调试通过。

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


 

标注与解释:

WaitForXXX()可能在事件、作业、互斥量、进程、信号量、线程、定时器、以及其他对象上等待。

TerminateThread()函数也可以用来终止线程,但是线程会立即终止,其没有机会释放已经获得的资源

 

windows获取系统处理器的基本信息:

#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{
	SYSTEM_INFO sysInfo;
	GetSystemInfo( &sysInfo );

	//打印数据项
	printf("Systme hardware information : \n");

	printf("OME ID : %u\n",sysInfo.dwOemId);
	printf("Number of processors : %u\n",sysInfo.dwNumberOfProcessors);
	printf("Processor type : %u\n",sysInfo.dwProcessorType);
	printf("Active processor mask : %u\n",sysInfo.dwActiveProcessorMask);
	printf("Page size : %u bytes\n",sysInfo.dwPageSize);

	system("pause");
	return 0;
}



 

可以看到,这款i5处理器支持HT超线程技术。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Qt多线程分享——你必须知道的进程知识点
Qt多线程分享——你必须知道的进程知识点
32 0
[笔记]Windows核心编程《十一》Windows线程池
Windows核心编程《十一》Windows线程池
98 0
Windows10 VS2017 C++多线程传参和等待线程结束
版权声明:本文可能为博主原创文章,若标明出处可随便转载。 https://blog.csdn.net/Jailman/article/details/85322164 #include "pch.
2710 0
+关注
season雅宁
大数据生态圈,计算机视觉,机器学习,高端技术的爱好者,话不多说,上代码!!!
文章
问答
文章排行榜
最热
最新
相关电子书
更多
多线程
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载