多线程

来源:互联网 发布:急难先锋4优化 编辑:程序博客网 时间:2024/06/14 15:10

1、线程基本函数

//创建线程
HANDLEWINAPICreateThread(
  LPSECURITY_ATTRIBUTESlpThreadAttributes,
  SIZE_TdwStackSize,
  LPTHREAD_START_ROUTINElpStartAddress,
  LPVOIDlpParameter,
  DWORDdwCreationFlags,
  LPDWORDlpThreadId
); 

//等待函数使线程进入等待状态,直到指定的内核对象被触发
DWORDWINAPIWaitForSingleObject(
  HANDLEhHandle,
  DWORDdwMilliseconds
);  
//该函数用于创造一个独占资源
HANDLE CreateMutex(
    LPSECURITY_ATTRIBUTES lpMutexAttributes, // SD
    BOOL bInitialOwner, // initial owner
    LPCTSTR lpName // object name
 );  

互斥使用:

//MultiThread#include <iostream>#include <cstdlib>#include <windows.h>using namespace std;DWORD WINAPI Fun1Proc(LPVOID lpParameter); DWORD WINAPI Fun2Proc(LPVOID lpParameter);int tickets = 100;HANDLE hMutex;int main(){       hMutex = CreateMutex(NULL, FALSE, NULL);        HANDLE hThread_1 = CreateThread(NULL, 0, Fun1Proc, NULL, 0, NULL);    HANDLE hThread_2 = CreateThread(NULL, 0, Fun2Proc, NULL, 0, NULL);    CloseHandle(hThread_1);    CloseHandle(hThread_2);            system("pause");    return 0;            }DWORD WINAPI Fun1Proc(LPVOID lpParameter){      while (true)      {            WaitForSingleObject(hMutex, INFINITE);            if (tickets > 0)            {                 Sleep(10);                 cout << "Thread 1 sell ticket : "<<tickets--<<endl;                 }            else                 break;            ReleaseMutex(hMutex);            }      return 0;      }      DWORD WINAPI Fun2Proc(LPVOID lpParameter){       while (true)      {            WaitForSingleObject(hMutex, INFINITE);            if (tickets > 0)            {                Sleep(10);                 cout << "Thread 2 sell ticket : "<<tickets--<<endl;                 }            else                 break;            ReleaseMutex(hMutex);            }      return 0;      }


 
原创粉丝点击