Windows 下多线程编程技术


(1) 线程的创建:(主要以下2)

CWinThread* AfxBeginThread(AFX_THREADPROC pfnThreadProc,
  LPVOID lParam,
  int nPriority = THREAD_PRIORITY_NORMAL,
  UINT nStackSize = 0,
  DWORD dwCreateFlags = 0,
  LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
  );

HANDLE CreateThread(
  LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
  SIZE_T dwStackSize, // initial stack size
  LPTHREAD_START_ROUTINE lpStartAddress, // thread function
  LPVOID lpParameter, // thread argument
  DWORD dwCreationFlags, // creation option
  LPDWORD lpThreadId // thread identifier
  );

DWORD WINAPI myroutine(LPVOID param)

{

       printf("%d,hello from subroutine!\n",*((int*)param));

       return NULL;

}

int _tmain(int argc, _TCHAR* argv[])

{

       printf("hello from main!\n");

       int iSub = 11;

       DWORD dId;

       HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)myroutine,(LPVOID)&iSub,0,&dId);

       return 0;

}

(2) 结束线程:

BOOL CloseHandle(HANDLE hObject);

BOOLTerminateThread( HANDLEhThread,DWORDdwExitCode);

VOID ExitThread(DWORD dwExitCode);

结束线程最好使用线程函数返回,TerminateThreadExitThread2种方式都不推荐使用,也尽量不用。

( 3 ) 线程的暂停/重启:

DWORD SuspendThread( HANDLE hThread );

DWORD ResumeThread( HANDLE hThread );

( 4 ) 线程优先级:

BOOL SetThreadPriority( HANDLE hThread, int nPriority ); 从主线程继承基础上设置优先级。

( 5 ) 公共资源的并发访问与同步:

临界区:

Critical_Section cs;

void main()

{

       InitializeCriticalSection(&cs);

       …

       DeleteCriticalSection(&cs);

}

DWORD WINAPI mythread(LPVOID param)

{

EnterCriticalSection(&cs);       ¬

…//操作。。。

LeaveCriticalSection(&cs);

}

锁机制:

CCriticalSection cs;

void main()

{

}

DWORD WINAPI mythread(LPVOID param)

{

cs.Lock();

cs.Unlock();

}

互斥量:

HANDLE hMutex;

void main()

{

       hMutex = CreateMutex(NULL,FALSE,”myownmutex”);

       …

}

DWORD WINAPI mythread(LPVOID param)

{

       WaitForSingleObject(hMutex,INFINITE);    ¬

       …

       ReleaseMutex(hMutex);

}

信号量:

HANDLE hSema;

void main()

{

       hSema = CreateSemaphore(NULL,nInit,nMax,”myownsemaphore”);

       …

}

DWORD WINAPI mythread(LPVOID param)

{

       WaitForSingleObject(hSema,5000L);   ¬

       …

       ReleaseSemaphore(hSema,1,NULL);

}

事件:

HANDLE hEvent;

void main()

{

       hEvent = CreateEvent(NULL,FALSE,TRUE,”myownevent”);

       …

       WaitForSingleObject(hEvent,INFINITE);     ¬

}

DWORD WINAPI mythread(LPVOID param)

{

       …//操作。。。

       SetEvent(hEvent);

}

转载于:https://www.cnblogs.com/JczmDeveloper/p/3527300.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值