线程

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

DWORD  WINAPI  Fun1Pro(LPVOID lpParameter);
DWORD  WINAPI  Fun2Pro(LPVOID lpParameter);
DWORD  WINAPI  Fun3Pro(LPVOID lpParameter);
int    ticker = 1000;
HANDLE hMutex;

int _tmain(int argc, _TCHAR* argv[])
{
     HANDLE   thread1;
     HANDLE   thread2;
     HANDLE   thread3;
     thread1 = CreateThread(NULL, 0, Fun1Pro, NULL, 0, NULL);
     thread2 = CreateThread(NULL, 0, Fun2Pro, NULL, 0, NULL);
     thread3 = CreateThread(NULL, 0, Fun3Pro, NULL, 0, NULL);
     CloseHandle(thread1);
     CloseHandle(thread2);
     CloseHandle(thread3);

     hMutex  = CreateMutex(NULL, FALSE, NULL);
     Sleep(4000);

     return 0;
}


DWORD  WINAPI  Fun1Pro(LPVOID lpParameter)
{
     while (TRUE)
     {
          WaitForSingleObject(hMutex, INFINITE);
          if (ticker > 0)
          {
                Sleep(2);
                cout << "number one  sale  ticket : " << ticker-- << "sale" << endl;
          }
          else
                break;
          ReleaseMutex(hMutex);
       }
       return 0;
}


DWORD  WINAPI  Fun2Pro(LPVOID lpParameter)
{
     while (TRUE)
     {
          WaitForSingleObject(hMutex, INFINITE);
          if (ticker > 0)
          {
                Sleep(2);
                cout << "number two  sale  ticket : " << ticker-- << "sale" << endl;
          }
          else
                break;
          ReleaseMutex(hMutex);
       }
       return 0;
}


DWORD  WINAPI  Fun3Pro(LPVOID lpParameter)
{
     while (TRUE)
     {
          WaitForSingleObject(hMutex, INFINITE);
          if (ticker > 0)
          {
                Sleep(2);
                cout << "number  three  sale  ticket : " << ticker-- << "sale" << endl;
          }
          else
                break;
          ReleaseMutex(hMutex);
       }
       return 0;
}


虽然很简单,但是刚刚开始看线程,还是比较HAPPY的.

HANDLE CreateMutex(
  LPSECURITY_ATTRIBUTES lpMutexAttributes,
  BOOL bInitialOwner,
  LPCTSTR lpName
);

 

lpMutexAttributes
[in] Pointer to a SECURITY_ATTRIBUTES structure that determines whether the returned handle can be inherited by child processes. If lpMutexAttributes is NULL, the handle cannot be inherited.
bInitialOwner
[in] If this value is TRUE and the caller created the mutex, the calling thread obtains initial ownership of the mutex object. Otherwise, the calling thread does not obtain ownership of the mutex. To determine if the caller created the mutex, see the Return Values section.
lpName
[in] Pointer to a null-terminated string specifying the name of the mutex object. The name is limited to MAX_PATH characters. Name comparison is case sensitive.

Timeout.Infinite 字段

             

Collapse 图像语法

C++
public:
literal 
         
         
          
          int
         
          Infinite

Collapse 图像备注

此常数的值是 -1。对于接受 timeout 参数的线程处理方法(如 Thread.Sleep(Int32)Thread.Join(Int32)),该值用于取消超时行为。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值