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超线程技术。
win32多线程学习笔记的更多相关文章
- Win32 多线程学习笔记
学到的API函数 一.线程 创建线程.结束线程.获取线程的结束码 CreateThread ExitThread GetExitCodeThread 二.线程结束时触发 创建线程之后,等待线程的结束之 ...
- java多线程学习笔记——详细
一.线程类 1.新建状态(New):新创建了一个线程对象. 2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中, ...
- JAVA多线程学习笔记(1)
JAVA多线程学习笔记(1) 由于笔者使用markdown格式书写,后续copy到blog可能存在格式不美观的问题,本文的.mk文件已经上传到个人的github,会进行同步更新.github传送门 一 ...
- 多线程学习笔记九之ThreadLocal
目录 多线程学习笔记九之ThreadLocal 简介 类结构 源码分析 ThreadLocalMap set(T value) get() remove() 为什么ThreadLocalMap的键是W ...
- java进阶-多线程学习笔记
多线程学习笔记 1.什么是线程 操作系统中 打开一个程序就是一个进程 一个进程可以创建多个线程 现在系统中 系统调度的最小单元是线程 2.多线程有什么用? 发挥多核CPU的优势 如果使用多线程 将计算 ...
- Java多线程学习笔记(一)——多线程实现和安全问题
1. 线程.进程.多线程: 进程是正在执行的程序,线程是进程中的代码执行,多线程就是在一个进程中有多个线程同时执行不同的任务,就像QQ,既可以开视频,又可以同时打字聊天. 2.线程的特点: 1.运行任 ...
- java 多线程学习笔记
这篇文章主要是个人的学习笔记,是以例子来驱动的,加深自己对多线程的理解. 一:实现多线程的两种方法 1.继承Thread class MyThread1 extends Thread{ public ...
- Java多线程学习笔记--生产消费者模式
实际开发中,我们经常会接触到生产消费者模型,如:Android的Looper相应handler处理UI操作,Socket通信的响应过程.数据缓冲区在文件读写应用等.强大的模型框架,鉴于本人水平有限目前 ...
- Java多线程学习笔记
进程:正在执行中的程序,其实是应用程序在内存中运行的那片空间.(只负责空间分配) 线程:进程中的一个执行单元,负责进程汇总的程序的运行,一个进程当中至少要有一个线程. 多线程:一个进程中时可以有多个线 ...
随机推荐
- Swift中声明协议中的class关键字的作用
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 最近在Cocos2D编程for Swift中看到以下一个代码片 ...
- 6.4、Android Studio的GPU Monitor
Android Monitor包含GPU Monitor,它将可视化的显示渲染窗体的时间.GPU Monitor可以帮助你: 1. 迅速查看UI窗体生成 2. 辨别是否渲染管道超出使用线程时间 在GP ...
- GDAL不支持创建PCIDSK的面状矢量格式
最近在使用GDAL创建PCIDSK格式的矢量数据,发现创建点和线的矢量数据都没问题,创建面状的只有属性表没有图形.在GDAL官网说明也写的是支持的,地址为:http://www.gdal.org/fr ...
- 利用cocos2d-x实现CandyCrushSaga消除功能
猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=455 昨天没事写了个三消玩玩.已 ...
- 保证service存活
Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStart ...
- android程序崩溃后重启
有时候由于测试不充分或者程序潜在的问题而导致程序异常崩溃,这个是令人无法接受的,在android中怎样捕获程序的异常崩溃,然后进行一些必要的处理或重新启动 应用这个问题困恼了我很久,今天终于解决了该问 ...
- Android实现系统ROOT, 并能赋予app root权限
1. 获取root权限 --> 修改adb源码 a. 打开 system/core/adb/adb_main.cpp,或者是 system/core/adb/daemon/main.c ...
- Tomcat性能优化及常用命令整理
1汤姆猫性能优化 1.1连接参数 1.1.1默认连接配置 默认连接器采用阻塞式 IO,默认最大线程数为200,配置如下: <Connector port="8080" pro ...
- 1.Maven+SpringMVC+Eclipse软件安装配置,Maven报插件错误,Eclipse总是卡死的解决办法,导入一个maven工程后 一直显示importing maven project
使用Maven+SpringMVC+Eclipse软件安装配置过程中的问题: 1.Eclipse总是卡死的解决办法: 一:内存不足所以会卡死,配置一下eclipse.ini修改这几个值就好了-X ...
- java方法重写和super关键字
//java方法重写和super关键字 //在继承中,其实就是子类定义了和父类同名的方法 //就是方法,属性都是相通的 //重写限制: //被子类重写的方法不能拥有比父类方法更加严格的权限 //sup ...