包含头文件

#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 多线程(一)相关推荐

  1. WinAPI多线程同步

    WinAPI多线程同步 WINAPI多线程同步主要有5种方式:全局变量.事件.临界区.互斥量.信号量. 代码是多线程编程的入门代码,为了让自己熟悉基础操作,保留笔记,方便日后查询,下面分别展示各方法示 ...

  2. 菜鸟报告——多线程操作实例

    本学期首次课老师给的题目,刚开始我很懵,后来查阅网上资源才大概做出来了. 以下是详情,请各位大神多多指教!!! 题目:基于windows/visulstudio x64 实现多线程编程 要求: 1.每 ...

  3. COM组件开发实践(七)---多线程ActiveX控件和自动调整ActiveX控件大小(上)

    声明:本文代码基于CodeProject的文章<A Complete ActiveX Web Control Tutorial>修改而来,因此同样遵循Code Project Open L ...

  4. 【转】windows平台多线程同步之Mutex的应用

    线程组成: 线程的内核对象,操作系统用来管理该线程的数据结构. 线程堆栈,它用于维护线程在执行代码时需要的所有参数和局部变量.   操作系统为每一个运行线程安排一定的CPU时间 -- 时间片.系统通过 ...

  5. AfxBeginThread的介绍/基本用法和Window多线程使用详解

    AfxBeginThread     用户界面线程和工作者线程都是由AfxBeginThread创建的.现在,考察该函数:MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另 ...

  6. C++使用thread类多线程编程

    目录 pthread多线程 系统自带CreateThread std::thread c++ 多线程总结_jacke121的专栏-CSDN博客 std thread比较好用,但是系统带的socket不 ...

  7. 多线程信号量PV操作初探

    直接上源码吧: 在主线程中创建一个信号量mutex(注意参数,当前值和最大值都设为1),开启总计PRODUCER_COUNT份producer线程,不停地对该信号量mutex进行PV操作:再开启COM ...

  8. Win32 API 多线程编程示例 - 窗口版

    网上有一些Win32 多线程编程示例,多是控制台版本:下面哥作一个窗口版本: /*-------------------------------------------------bobo, 2020 ...

  9. Win32 多线程学习总结

    Win32多线程编程学习心得 http://blog.csdn.net/jonathan321/article/details/50782832 博客原文地址:http://jerkwisdom.gi ...

  10. 一个基于C++的多线程编程实例(CreateThread函数)

    本博客主要总结了基于C++的多线程函数CreateThread,互斥锁(或者称资源独占)函数CreateMutex,等待资源函数WaitForSingleObject,关闭线程函数(其实是关闭线程的句 ...

最新文章

  1. PHP date 格式化一个本地时间/日期
  2. centos 重装 php5,centos6.6学习笔记:安装PHP5.5
  3. 项目开发日志:Build AssetBundle——SpriteAtlas(已解惑)
  4. 移动开发在路上-- IOS移动开发系列 多线程二
  5. 推荐一款 IDEA 神器 ,人工智能帮你写代码,再也不用加班了!!
  6. CMake下载及安装
  7. 后面冒号_Python 数组中的冒号使用
  8. NLP --- 条件随机场CRF详解
  9. 性能优化篇 之 如何开展优化类的工作(1)
  10. springboot使用@Async实现异步操作
  11. 机器学习数学基础篇一:高数基础
  12. 这可能是 Python 里最强的绘制地图神器
  13. ffmpeg命令行将ts转码为mp4
  14. UC刘兰奇极速版制动刷金币
  15. java根据业务排序利用Comparator.comparing自定义排序规则
  16. centos安装 docker的教程
  17. 基本放大器电路- (一)
  18. json序列化 java对象_Json 数据反序列化为Java对象
  19. Linux以太网卡软硬件架构
  20. 微信会员卡html修改样式模板,微信小程序 JS动态修改样式的实现代码

热门文章

  1. leapftp,leapftp中文教程加图解
  2. OpenGL二十面体及多次细分成球体
  3. 基于Spatial-Temporal Transformer的城市交通流预测
  4. 快速排序c语言实现,快速排序——C语言实现
  5. 面向对象编程---掷骰子游戏
  6. theano java_theano安装问题(示例代码)
  7. 流量映射端口反弹(lcx,ew)
  8. 强化学习基础入门级介绍
  9. 软件系统设计-12-软件设计体系结构概述
  10. 激光雷达原理 你真的了解全了吗?