win32 多线程基础

简介: // MultiThead.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include using namespace std; DWORD WINAPI Fun1Proc( LPVOID l...
// 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;
}


但是不知道,为啥,结果和孙鑫视频里的结果不一样。
相关文章
|
4月前
|
API Windows
揭秘网络通信的魔法:Win32多线程技术如何让服务器化身超级英雄,同时与成千上万客户端对话!
【8月更文挑战第16天】在网络编程中,客户/服务器模型让客户端向服务器发送请求并接收响应。Win32 API支持在Windows上构建此类应用。首先要初始化网络环境并通过`socket`函数创建套接字。服务器需绑定地址和端口,使用`bind`和`listen`函数准备接收连接。对每个客户端调用`accept`函数并在新线程中处理。客户端则通过`connect`建立连接,双方可通过`send`和`recv`交换数据。多线程提升服务器处理能力,确保高效响应。
59 6
|
机器学习/深度学习 程序员 API
深入浅出Win32多线程程序设计之基本概念
一.深入浅出Win32多线程程序设计之基本概念[转] 引言  从单进程单线程到多进程多线程是操作系统发展的一种必然趋势,当年的DOS系统属于单任务操作系统,最优秀的程序员也只能通过驻留内存的方式实现所谓的"多任务",而如今的Win32操作系统却可以一边听音乐,一边编程,一边打印文档。
1420 1
|
Windows
Win32线程——等待另一个线程结束
转载:https://blog.csdn.net/yss28/article/details/53646627 《Win32多线程程序设计》–Jim Beveridge & Robert Wiener “等待某个什么东西”是线程常常需要做的事。
2132 0
|
API C# Windows
C# Win32控制台线程计时器代码示例
在C#中提供了三种类型的计时器:1、基于 Windows 的标准计时器(System.Windows.Forms.Timer)2、基于服务器的计时器(System.Timers.Timer)3、线程计时器(System.
839 0
|
C++
win32 线程通信初步
    // 线程通信机制.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #define NUM_THREADS 10 #include #include #include typedef struct { int Id; HAN...
888 0
|
消息中间件 开发工具 Windows
深入浅出Win32多线程设计之MFC的多线程-线程与消息队列(经典)
1、创建和终止线程   在MFC程序中创建一个线程,宜调用AfxBeginThread函数。该函数因参数不同而具有两种重载版本,分别对应工作者线程和用户接口(UI)线程。   工作者线程 CWinThread *AfxBeginThread( AFX_THREADPROC pfnThreadP...
1317 0