多线程编程实例
2015-01-30 19:22
357 查看
1、创建一个线程用CreateThread函数
参数1:指向SECURITY_ATTRIBUTE结构体的一个指针,再次可以设置为NULL,缺省的安全性
参数2:指定初始提交的栈的大小,以字节为单位。可以设置为0,使用默认大小。
参数3:指向一个LSPTHREAD_START_ROUTING类型的应用程序定义个函数的指针,该函数将被线程指向,表示了线程的起始地址。ThreadProc函数,函数名可以改变。
参数4:指定一个单独的参数的值,传递给线程函数ThreadProc。
参数5:指定控制线程创建的附加标记,如果CREATE_SUSPENDED被指定,线程创建后处于暂停状态,直到调用ResumeThread函数。如果该值为0,线程创建后立即执行。
参数6:返回值参数,用于接收线程的标识符。在系统(NT/2000)下可以设置为NULL。
2、多线程演示火车票售票系统,包含互斥对象的使用
参数1:指向SECURITY_ATTRIBUTE结构体的一个指针,再次可以设置为NULL,缺省的安全性
参数2:指定初始提交的栈的大小,以字节为单位。可以设置为0,使用默认大小。
参数3:指向一个LSPTHREAD_START_ROUTING类型的应用程序定义个函数的指针,该函数将被线程指向,表示了线程的起始地址。ThreadProc函数,函数名可以改变。
参数4:指定一个单独的参数的值,传递给线程函数ThreadProc。
参数5:指定控制线程创建的附加标记,如果CREATE_SUSPENDED被指定,线程创建后处于暂停状态,直到调用ResumeThread函数。如果该值为0,线程创建后立即执行。
参数6:返回值参数,用于接收线程的标识符。在系统(NT/2000)下可以设置为NULL。
2、多线程演示火车票售票系统,包含互斥对象的使用
#include <iostream> #include <Windows.h> #include <stdio.h> using namespace std; DWORD WINAPI ThreadProc1(LPVOID lpParameter);//线程函数定义 DWORD WINAPI ThreadProc2(LPVOID lpParameter);//线程函数定义 int index = 0; int tickets = 100; HANDLE hMutex; int _tmain(int argc, _TCHAR* argv[]) { HANDLE hThread1; HANDLE hThread2; hThread1 = CreateThread(NULL,0,ThreadProc1,NULL,0,NULL); hThread2 = CreateThread(NULL,0,ThreadProc2,NULL,0,NULL); CloseHandle(hThread1);//关闭线程句柄,注意,此时线程还在。只不过线程内核对象的引用计数减一,减为0时,线程释放。 CloseHandle(hThread2); hMutex = CreateMutex(NULL,FALSE,NULL);//创建一个匿名互斥对象,FALSE则说明没有线程拥有该互斥对象,所以为有信号状态 /*while(index++ < 1000) cout << "main Thread is running!" << endl;*/ Sleep(4000); return 0; } DWORD WINAPI ThreadProc1(LPVOID lpParameter)//线程函数实现 { /*while(index++ < 1000) cout << "Thread1 Thread is running!" << endl;*/ while (TRUE) { WaitForSingleObject(hMutex,INFINITE);//请求互斥对象,当互斥对象有信号时可以被请求 if (tickets > 0) { cout << "Thread1 sell ticket is : " << tickets-- << endl; } else { break; } ReleaseMutex(hMutex);//释放指定互斥对象的所有权,是互斥对象变为有信号状态。 } return 0; } DWORD WINAPI ThreadProc2(LPVOID lpParameter)//线程函数实现 { /*while(index++ < 1000) cout << "Thread2 Thread is running!" << endl;*/ while (TRUE) { WaitForSingleObject(hMutex,INFINITE);//请求互斥对象,当互斥对象有信号时可以被请求,参数2意思是如果不释放互斥对象,则一直拥有 if (tickets > 0) { Sleep(10); cout << "Thread2 sell ticket is : " << tickets-- << endl; } else { break; } ReleaseMutex(hMutex);//释放指定互斥对象的所有权,是互斥对象变为有信号状态。 } return 0; }
相关文章推荐
- C#多线程编程实例实战
- C#多线程编程实例实战
- 多线程编程实例----服务器客户端简单通信
- C#多线程编程实例实战
- C# Socket多线程编程实例
- c#多线程编程实例实战
- Linux下多线程(pthread)编程实例
- 多线程编程实例----线程同步之互斥量
- 多线程编程实例----线程同步之事件
- 多线程编程实例---pthread_join函数详解
- [转]C#多线程编程实例实战
- C#中Socket多线程编程实例(转载)
- C# Socket多线程编程实例
- 多线程编程实例----多线程同时排序
- C#多线程编程实例实战教程
- Linux C++ 面向对象多线程编程实例之“生产者-消费者”
- C#多线程编程实例实战2
- C# Socket多线程编程实例
- C#多线程编程实例实战
- C#多线程编程实例实战