自学Windows多线程知识,例程如下:

 #include <iostream>
#include <windows.h>
#include <process.h>
using namespace std;
HANDLE hMutex = NULL;//互斥量
HANDLE mutex = NULL; unsigned WINAPI Fun1(PVOID lpParamter)
{
WaitForSingleObject(mutex, INFINITE);
for (int i = ; i < ; i++)
cout << "A Thread Fun 1 Display!"<<endl;
Sleep();
ReleaseMutex(mutex);
return 0L;
} void main()
{
HANDLE hThread = (HANDLE)_beginthreadex(NULL, , Fun1, NULL, , NULL);//较CreateThread更加安全
//HANDLE hThread = CreateThread(NULL, 0, Fun1, NULL, 0, NULL);
CloseHandle(hThread);
//_endthreadex((unsigned)hThread);//较CloseHandle更加安全
mutex = CreateMutex(NULL,false,"Ohye"); for (int i = ; i < ; i++){
WaitForSingleObject(mutex, INFINITE);
cout << "Main Thread Display!" << endl;
Sleep();
ReleaseMutex(mutex);
} system("pause");
}

运行结果:

_endthreadex与_beginthreadex方法相对应,
1、_endthreadex销毁了在_beginthreadex分配的堆内存(保证了没有内存泄露)。

2、其调用了系统API ExitThread退出线程。

ExitThread  VS _endthreadex
在编写C\C++程序时,要调用_endthreadex来结束线程。基于如下两个理由:

1、ExitThread函数非C++函数,线程创建的C++对象不会得到析构。

2、若线程中使用了ptd,ExitThread不会释放内存,造成内存泄露。

CreateThread VS _beginthreadex
一般的理由是,CreateThread有可能照成内存泄露。(如果使用了ptd内存,而CreateThread并不会在内部自动调用释放内存函数,但若链接的是C/C++运行库的dll版本,则其会在线程退出的DLL_THREAD_DETCH通知中释放内存)。

Windows多线程学习随笔的更多相关文章

  1. [C++ 多线程] 学习前瞻

    1 多线程是什么? 1.1 多线程的概念? 说起多线程,那么就不得不说什么是线程,而说起线程,又不得不说什么是进程. 进程可以简单的理解为一个可以独立运行的程序单位,它是线程的集合,进程就是有一个或多 ...

  2. 【转】C#多线程学习

    C#多线程学习(一) 多线程的相关概念 什么是进程?当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的. 什么是线程?线程是程序 ...

  3. C# 多线程学习总结

    C# 多线程学习总结 C#多线程学习(一) 多线程的相关概念 什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的. ...

  4. Windows多线程基础

    进程与线程基础 程序: 计算机指令的集合,以文件的形式存储在磁盘上 进程: 正在运行是程序实例,以是一个程序在其自身的地址空间的一次执行活动.进程有一个进程管理的内核对象和地址空间组成. 线程: 程序 ...

  5. Windows多线程编程入门

    标签(空格分隔): Windows multithread programming 多线程 并发 编程 背景知识 在开始学习多线程编程之前,先来学习下进程和线程 进程 进程是指具有一定独立功能的程序在 ...

  6. JavaSE 第二次学习随笔(四)

    ---------------------------------------------------------------------------------------------------- ...

  7. 最全的Windows Azure学习教程汇总

    Windows Azure 是微软基于云计算的操作系统,能够为开发者提供一个平台,帮助开发可运行在云服务器.数据中心.Web 和 PC 上的应用程序. Azure 是一种灵活和支持互操作的平台,能够将 ...

  8. Windows多线程多任务设计初步(转)

    Windows多线程多任务设计初步 [前言:]当前流行的Windows操作系统,它能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程 ...

  9. windows多线程编程星球(一)

    以前在学校的时候,多线程这一部分是属于那种充满好奇但是又感觉很难掌握的部分.原因嘛我觉得是这玩意儿和编程语言无关,主要和操作系统的有关,所以这部分内容主要出现在讲原理的操作系统书的某一章,看完原理是懂 ...

随机推荐

  1. 20175213 2018-2019-2 《Java程序设计》第8周学习总结

    教材学习内容总结 1:泛型主要目的是建立具有类型安全的集合框架,如链表,散列映射等数据结构. 泛型类的声明: class People<E> People是泛型类的名称,E是其中泛型,E可 ...

  2. 源码解析之HashMap源码

    关于HashMap的源码分析,网上已经有很多写的非常好的文章了,虽然多是基于java1.8版本以下的.Java1.8版本的HashMap源码做了些改进,理解起来更复杂点,但也不脱离其桶+链表或树的重心 ...

  3. pytorch1.0 安装执行后报错ImportError: No module named future.utils

    File "/usr/local/lib/python2.7/dist-packages/caffe2/python/utils.py", line 10, in <modu ...

  4. keil的自动补全功能

    设置完之后,在.c文件上试一下,发现还是不能自动补全. 后来去各种贴吧里找到了答案,是我的.c文件还没有保存到工程文件中去,所以不能实现这个功能.

  5. wsl ubuntu 配置c++环境

    1.sudo apt-get install  build-essential 更新 配置源 2.sudo apt install gcc-8 3.sudo apt install g++-8 cd ...

  6. mac 下直接给docker容器加映射 mysql 为例

    如果你是下面这种情况,本文可能回给你一些帮助 os是Mac,docker中已有mysql容器,并且已经有数据,但是没有设置映射,想要从主机连接docker 中的mysql,以便更好的查看,增加,删除数 ...

  7. C语言博客作业01--分支、顺序结构

    1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 通过本章的学习,学会了三种基本结构以及一些基本的运算知识,学会编写简单的程序,跟着老师的步子学习基本的东西都能 ...

  8. mysql学习笔记--数据库预处理

    一.概念 1. 预编译一次,可以多次执行.用来解决一条sql语句频繁执行的问题 2. 语法 a. 预处理语句:preapre 预处理名字 from 'sql语句' b. 执行预处理:execute 预 ...

  9. QT Designer基础——登录界面设计基础版

    认识QT Designer提供的可选控件:以下八个大类 Layouts:布局相关 Spacers:留空 Buttons:可点击的按钮类 Item Views和 Item Widgets:高级控件,例如 ...

  10. jQuery实现动态分割div

    转自:https://www.cnblogs.com/herd/p/6014848.html 演示地址:http://www.vfkjsd.cn/div/2/div.html