win32多线程学习笔记
《多核程序设计技术》
第五章——线程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超线程技术。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· MQ 如何保证数据一致性?
· 《HelloGitHub》第 108 期
· 一个基于 .NET 开源免费的异地组网和内网穿透工具