WinAPI 多线程(一)
包含头文件
#include<windows.h>
CreateThread创建线程
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
DWORD dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadid);
参数
lpThreadAttributes: 指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows NT中,设为NULL使用默认安全性。
dwStackSize: 设置初始栈的大小,以字节为单位,如果为0,那么默认将使用与调用该函数的线程相同的栈空间大小。
lpStartAddress: 指向线程函数的指针,函数名称没有限制,但是必须以下形式声明:DWORD WINAPI ThreadProc(LPVOID lpParam).
lpParameter: 向线程函数传递的参数,是一个void*的指针,不需传递参数时,为NULL。
dwCreationFlags: 线程的标志,可取值如下
(1)CREATE_SUSPENDED:创建一个挂起的线程,他无法运行直到调用Thread().
(2)0:表示创建后立即激活。
(3)STACK_SIZE_PARAM_IS_A_RESERVATION:未指定此标记,使用dwStackSize指定提交的大小。
lpThreadid: 保存新线程ID,若不想返回线程ID,设置值为NULL。
返回值:
成功:返回线程句柄
失败:返回NULL,调用GetLastError()获取失败原因。
备注:
(1)CreateThread 是Windows API中再主线程的基础上创建一个新线程。创建成功之后会返回一个hThread的handle,且内核对象的计数加1。
(2)CloseHandle之后,引用计数减1,当变为0时,系统删除内核对象。handle仅仅是线程的一个“标识”。
获取线程ID
DWORD WINAPI GetCurrentThreadid(void); 返回获取当前的ID。
关闭线程句柄(引用记数-1)
BOOL CloseHandle(HANDLE hObject);
关闭了一个线程句柄,引用计数-1,表示 我不对这个句柄对应的线程做任何干预(如waitforsingleobject之类),但并没有结束线程。
返回值:
成功:TRUE
失败:FALSE 调用GetLastError()获得失败原因。
注意:如果关闭后再对句柄做任何都无用!
挂起指定的线程
DWORD WINAPI SuspendThread(HANDLE hThread); hThread: 需要挂起的句柄。
恢复被挂起的线程
DWORD WINAPI ResumeThread(HANDLE hThread); hThread: 需要挂起的句柄。
休眠线程的执行
VOID WINAPI Sleep(DWORD dwMilliseconds); dwMilliseconds:毫秒数。
例子:
#include<windows.h>
#include<iostream>
using namespace std;DWORD WINAPI Threadpro(LPVOID lp)
{char * name = (char*)lp;while (true){cout << "线程传参:" << name << endl;DWORD id = GetCurrentThreadId();cout << "子线程id:" << id << endl;Sleep(1000);}return 0;
}
int main()
{HANDLE thread;DWORD threadid;thread = CreateThread(NULL, 0, Threadpro, "hello",0, &threadid);if (thread == NULL){cout << "线程句柄错误:" << GetLastError() << endl;}cout << "句柄:" << thread << endl;cout << "线程ID threadid :" << threadid << endl;cout << "main线程id:" << GetCurrentThreadId() << endl;//CloseHandle(thread);getchar();SuspendThread(thread);getchar();ResumeThread(thread);getchar();//system("pause");return 0;
}
均为自己学习时所做记录 方便日后查阅
WinAPI 多线程(一)相关推荐
- WinAPI多线程同步
WinAPI多线程同步 WINAPI多线程同步主要有5种方式:全局变量.事件.临界区.互斥量.信号量. 代码是多线程编程的入门代码,为了让自己熟悉基础操作,保留笔记,方便日后查询,下面分别展示各方法示 ...
- 菜鸟报告——多线程操作实例
本学期首次课老师给的题目,刚开始我很懵,后来查阅网上资源才大概做出来了. 以下是详情,请各位大神多多指教!!! 题目:基于windows/visulstudio x64 实现多线程编程 要求: 1.每 ...
- COM组件开发实践(七)---多线程ActiveX控件和自动调整ActiveX控件大小(上)
声明:本文代码基于CodeProject的文章<A Complete ActiveX Web Control Tutorial>修改而来,因此同样遵循Code Project Open L ...
- 【转】windows平台多线程同步之Mutex的应用
线程组成: 线程的内核对象,操作系统用来管理该线程的数据结构. 线程堆栈,它用于维护线程在执行代码时需要的所有参数和局部变量. 操作系统为每一个运行线程安排一定的CPU时间 -- 时间片.系统通过 ...
- AfxBeginThread的介绍/基本用法和Window多线程使用详解
AfxBeginThread 用户界面线程和工作者线程都是由AfxBeginThread创建的.现在,考察该函数:MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另 ...
- C++使用thread类多线程编程
目录 pthread多线程 系统自带CreateThread std::thread c++ 多线程总结_jacke121的专栏-CSDN博客 std thread比较好用,但是系统带的socket不 ...
- 多线程信号量PV操作初探
直接上源码吧: 在主线程中创建一个信号量mutex(注意参数,当前值和最大值都设为1),开启总计PRODUCER_COUNT份producer线程,不停地对该信号量mutex进行PV操作:再开启COM ...
- Win32 API 多线程编程示例 - 窗口版
网上有一些Win32 多线程编程示例,多是控制台版本:下面哥作一个窗口版本: /*-------------------------------------------------bobo, 2020 ...
- Win32 多线程学习总结
Win32多线程编程学习心得 http://blog.csdn.net/jonathan321/article/details/50782832 博客原文地址:http://jerkwisdom.gi ...
- 一个基于C++的多线程编程实例(CreateThread函数)
本博客主要总结了基于C++的多线程函数CreateThread,互斥锁(或者称资源独占)函数CreateMutex,等待资源函数WaitForSingleObject,关闭线程函数(其实是关闭线程的句 ...
最新文章
- PHP date 格式化一个本地时间/日期
- centos 重装 php5,centos6.6学习笔记:安装PHP5.5
- 项目开发日志:Build AssetBundle——SpriteAtlas(已解惑)
- 移动开发在路上-- IOS移动开发系列 多线程二
- 推荐一款 IDEA 神器 ,人工智能帮你写代码,再也不用加班了!!
- CMake下载及安装
- 后面冒号_Python 数组中的冒号使用
- NLP --- 条件随机场CRF详解
- 性能优化篇 之 如何开展优化类的工作(1)
- springboot使用@Async实现异步操作
- 机器学习数学基础篇一:高数基础
- 这可能是 Python 里最强的绘制地图神器
- ffmpeg命令行将ts转码为mp4
- UC刘兰奇极速版制动刷金币
- java根据业务排序利用Comparator.comparing自定义排序规则
- centos安装 docker的教程
- 基本放大器电路- (一)
- json序列化 java对象_Json 数据反序列化为Java对象
- Linux以太网卡软硬件架构
- 微信会员卡html修改样式模板,微信小程序 JS动态修改样式的实现代码