当前位置: 首页 > news >正文

win32 多线程基础

// MultiThead.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<windows.h>
#include<iostream>
using namespace std;

DWORD WINAPI Fun1Proc(
					  LPVOID lpParameter	//thread data

					  );

DWORD WINAPI Fun2Proc(
					  LPVOID lpParameter	//thread data

					  );
int index=0;
int tickets=100;
HANDLE hMutex;

int _tmain(int argc, _TCHAR* argv[])
{
	HANDLE hThread1;
	HANDLE hThread2;
	hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
	hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
	CloseHandle(hThread1);
	CloseHandle(hThread2);

	//while(index++<=100)
	//cout<<"main thread is running\n"<<endl;
	//Sleep(100);
	//getchar();
	//hMutex=CreateMutex(NULL,FALSE,NULL);

	hMutex=CreateMutex(NULL,TRUE,"tickets");
	if(hMutex)//单例模式
	{
		if(ERROR_ALREADY_EXISTS==GetLastError())//看这个互斥对象是否已经创建出来了
		{
			cout<<"only instance can run!!!"<<endl;
			return 0;
		}
	}

	WaitForSingleObject(hMutex,INFINITE);
	ReleaseMutex(hMutex);
	ReleaseMutex(hMutex);
    Sleep(4000);//主线程放弃了执行时间



	system("pause");
	return 0;
}

DWORD WINAPI Fun1Proc(
	LPVOID lpParameter	//thread data

					  )
{
	/*
	while(index++<=100)
	cout<<"thread1 is running"<<endl;
	return 0;
	
	while(true)
	{
		WaitForSingleObject(hMutex,INFINITE);//有信号状态,
		if(tickets>0)
		{
			cout<<"thread1 sell ticket :"<<tickets--<<endl;

		}
		else 
			break;
		ReleaseMutex(hMutex);//好像是可以自动释放的
	}
	*/

	WaitForSingleObject(hMutex,INFINITE);
	cout<<"thread1 is running"<<endl;
	return 0;
}
DWORD WINAPI Fun2Proc(
	LPVOID lpParameter	//thread data

					  )
{
	/*
	while(index++<=100)
	cout<<"thread2 is running"<<endl;
	return 0;
	
	while(true)
	{
		WaitForSingleObject(hMutex,INFINITE);
		if(tickets>0)
		{
			cout<<"thread2 sell ticket :"<<tickets--<<endl;

		}
		else 
			break;
		ReleaseMutex(hMutex);
	}
	*/
	WaitForSingleObject(hMutex,INFINITE);
	cout<<"thread2 is running"<<endl;
	return 0;
}


但是不知道,为啥,结果和孙鑫视频里的结果不一样。

转载于:https://www.cnblogs.com/wangyaning/archive/2013/01/16/4237049.html

相关文章:

  • javascript 跳转页面
  • Java 泛型(一) 泛型使用基础
  • Codeforces 264B Good Sequences ★ (分解素因子+DP)
  • Unity(五):使用场景Ⅱ:用于单例模式
  • 【ZZ】9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路...
  • 密码绑定至密码文本框中
  • 使用PowerDesigner建立数据库模型
  • outerHTML兼容方法(jquery)
  • 解决compilation debug=true targetFramework=4.0 问题
  • Python学习笔记《Python核心编程》第13章 面向对象编程
  • GDI+ 图片高亮处理
  • int 反射到未知的 Enum , 使用 Enum.ToObject
  • USACO 3.1.1 Agri-Net
  • 关于SharePoint 2010 SP1
  • IE6,7下LI浮动不能自动换行,最后一行被隐藏掉解决办法
  • 网络传输文件的问题
  • hexo+github搭建个人博客
  • JavaScript 如何正确处理 Unicode 编码问题!
  • extract-text-webpack-plugin用法
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • React系列之 Redux 架构模式
  • Spark学习笔记之相关记录
  • text-decoration与color属性
  • 编写高质量JavaScript代码之并发
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 网络应用优化——时延与带宽
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​iOS安全加固方法及实现
  • #### go map 底层结构 ####
  • $L^p$ 调和函数恒为零
  • (27)4.8 习题课
  • (java)关于Thread的挂起和恢复
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (二)JAVA使用POI操作excel
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .Net CoreRabbitMQ消息存储可靠机制
  • .Net Core和.Net Standard直观理解
  • .NET 设计一套高性能的弱事件机制
  • .NET 中让 Task 支持带超时的异步等待
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .Net语言中的StringBuilder:入门到精通
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [2021 蓝帽杯] One Pointer PHP
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [Assignment] C++1
  • [BZOJ 3282] Tree 【LCT】
  • [C#]使用PaddleInference图片旋转四种角度检测
  • [C++][基础]1_变量、常量和基本类型