Windows多线程学习随笔
自学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多线程学习随笔的更多相关文章
- [C++ 多线程] 学习前瞻
1 多线程是什么? 1.1 多线程的概念? 说起多线程,那么就不得不说什么是线程,而说起线程,又不得不说什么是进程. 进程可以简单的理解为一个可以独立运行的程序单位,它是线程的集合,进程就是有一个或多 ...
- 【转】C#多线程学习
C#多线程学习(一) 多线程的相关概念 什么是进程?当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的. 什么是线程?线程是程序 ...
- C# 多线程学习总结
C# 多线程学习总结 C#多线程学习(一) 多线程的相关概念 什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的. ...
- Windows多线程基础
进程与线程基础 程序: 计算机指令的集合,以文件的形式存储在磁盘上 进程: 正在运行是程序实例,以是一个程序在其自身的地址空间的一次执行活动.进程有一个进程管理的内核对象和地址空间组成. 线程: 程序 ...
- Windows多线程编程入门
标签(空格分隔): Windows multithread programming 多线程 并发 编程 背景知识 在开始学习多线程编程之前,先来学习下进程和线程 进程 进程是指具有一定独立功能的程序在 ...
- JavaSE 第二次学习随笔(四)
---------------------------------------------------------------------------------------------------- ...
- 最全的Windows Azure学习教程汇总
Windows Azure 是微软基于云计算的操作系统,能够为开发者提供一个平台,帮助开发可运行在云服务器.数据中心.Web 和 PC 上的应用程序. Azure 是一种灵活和支持互操作的平台,能够将 ...
- Windows多线程多任务设计初步(转)
Windows多线程多任务设计初步 [前言:]当前流行的Windows操作系统,它能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程 ...
- windows多线程编程星球(一)
以前在学校的时候,多线程这一部分是属于那种充满好奇但是又感觉很难掌握的部分.原因嘛我觉得是这玩意儿和编程语言无关,主要和操作系统的有关,所以这部分内容主要出现在讲原理的操作系统书的某一章,看完原理是懂 ...
随机推荐
- 基于innodb_print_all_deadlocks从errorlog中解析MySQL死锁日志
本文是说明如何获取死锁日志记录的,不是说明如何解决死锁问题的. MySQL的死锁可以通过show engine innodb status;来查看,但是show engine innodb statu ...
- 移动端响应式布局--你不知道的CSS3.0媒体查询,解决rem部分情况下无法适配的场景
媒体查询作为响应式布局的方法之一,实际项目中用途也很广.但是你真的知道怎么用吗? 例如,下面匹配 iphone6/7/8 屏幕 @media screen and (max-width: 375px) ...
- iframe刷新
<div title="基本信息" style="padding:2px; "> <iframe id="newsrc& ...
- step_by_step_xUnit_Net_ABP
这段日子的开发一直使用Asp.net Boilerplate ,称之为项目模板自然就有开发中常用的功能,测试框架也在其中,土牛的ABP源代码都有通过测试,很遗憾的是我之前没有写过测试,不会就要去找资料 ...
- 从零开始学spring cloud(八) -------- Eureka 高可用机制
一.Eureka高可用机制介绍 Eureka服务器没有后端存储,但注册表中的服务实例都必须发送心跳以使其注册保持最新(因此可以在内存中完成). 客户端还有一个Eureka注册的内存缓存(因此,他们不必 ...
- 了解计算机与操作系统发展阶段--Windows
Windows发展的30多年,其实就是整个计算机应用,从小众化向大众化消费领域,快速前行的30多年. 让我们来一起温故下Windows这么多年的发展历程,看看Windows,是如何在市场和技术这两种力 ...
- Xcode9模拟器隐藏边框
选中模拟器,在Mac顶部菜单栏找到Window-->Show Device Bezeles 取消勾选代表去除黑边,勾选代表展示黑边,根据个人喜好设置吧
- java_28 序列化与反序列化
1.序列化和反序列化 序列化:把对象转换为字节序列的过程称为对象的序列化.(常见的就是存文件) 反序列化:把字节序列恢复为对象的过程称为对象阿德反序列化. 2.序列化和反序列化的使用: java.io ...
- 自定义扩展实现相对于addRoutes的removeRoutes方法——vue-router
使用vue-router的addRoutes方法做登录权限控制,当用户推出登录回到login页后,切换不同权限的账号,如果不reload页面,会导致router权限问题,故在vue-router代码中 ...
- boost中Function和Lambda的使用
:first-child { margin-top: 0px; } .markdown-preview:not([data-use-github-style]) h1, .markdown-previ ...