| ¡¡
Ïà¹Ø·ÖÀà VCÈëÃÅ ->VC ->VCShare Áù ¶àÏ̹߳ؼü×Ö VC ¶àÏß³ÌÖ÷ÒªÄÚÈÝ£º 1£¬ ¹¤×÷ÕßÏß³Ì 2£¬ Óû§½çÃæÏß³Ì 3£¬ ͬ²½ Ï̱߳»·ÖΪ¹¤×÷ÕßÏ̺߳ÍÓû§Óû§½çÃæÏ̡߳£Óû§½çÃæµÄÏ̵߳ÄÌØµãÊÇÓµÓе¥¶ÀµÄÏûÏ¢¶ÓÁУ¬¿ÉÒÔ¾ßÓÐ×Ô¼ºµÄ´°¿Ú½çÃæ£¬Äܹ»¶ÔÓû§ÊäÈëºÍʼþ×÷³ö·´Ó¦¡£ ¿ÉÒÔÓÃÒÔÏ·½·¨½¨Á¢Ò»¸ö¹¤×÷ÕßÏ̡߳£ UINT MyThreadProc(LPVOID pParam) { ¡ } AfxBeginThread(MyThread,..); ËüÓÐÁù¸ö²ÎÊý£¬µÚÒ»¸öΪ¿ØÖƺ¯Êý£¬µÚ¶þ¸öΪÆô¶¯Ïß³Ìʱ´«¸ø¿ØÖƺ¯ÊýµÄÈë¿Ú²ÎÊý£¬µ±Ç°Ï̵߳ÄÓÅÏȼ¶£¬µ±Ç°Ï̵߳ÄÕ»µÄ´óС£¬µ±Ç°Ï̵߳Ĵ´½¨×´Ì¬£¬°²È«ÊôÐÔ£¬ºóËĸöÓÐĬÈÏÖµ¡£ Óû§½çÃæỊ̈߳º Ê×ÏÈÀûÓÃÓ¦ÓóÌÐòÏòµ¼½¨Á¢µ¥Îĵµ³ÌÐòThread,ÔÙ½¨Á¢Thread1 : public CWinThread, Frame1 : public CFrameWnd,¿ÉÒÔÓÃCtrl+w½¨Á¢ÕâÁ½¸öÐÂÀà¡£ ÔÚCThreadAppÖмÓÒ»¸öÖ¸ÕëThread1* pThread1£¬ÔÚBOOL CThreadApp::InitInstance() ÖнøÐгõʼ»¯£º pThread1 = new Thread1(); pThread1->CreateThread(); ½«Thread1µÄ¹¹Ô캯Êý¸Ä³É¹«ÓС£ ÔÚThread1ÖмÓÒ»¸öÖ¸ÕëFrame1* m_pWnd£¬È»ºó³õʼ»¯¡£ BOOL Thread1::InitInstance() { m_pWnd = new Frame1(); return TRUE; } °ÑFrame1µÄ¹¹Ô캯Êý¸Ä³É¹«ÓУ¬ÔÚThread.hÖаüº¬#include "Frame1.h"¡£ ÔÚ×ÊÔ´±à¼Æ÷Öбà¼Ò»¸ö²Ëµ¥IDR_MENU£¬ËüÓÐÒ»¸ö²Ëµ¥ÏîID_BEGIN¡£ Frame1::Frame1() { Create(NULL,"Demo"); ShowWindow(SW_SHOW); UpdateWindow(); CMenu menu;//¿ÉÒÔÓþֲ¿±äÁ¿£¬ÒòΪÒÔºó²»»áÓõ½ËüÁË,¼Ó²Ëµ¥¡£ menu.LoadMenu(IDR_MENU); SetMenu(&menu); } ͬ²½ ¶àÏ̵߳ÄÒ»¸öÄѵãÊǸ÷Ï̼߳äµÄе÷¡£Í¬ÑùµÄ·½·¨ÔÚCThreadAppÖÐÔÙ¿ªÒ»¸öÏ̡߳£ BOOL CThreadApp::InitInstance() { ¡£¡£¡£¡£¡£¡£ pThread1 = new Thread1(); pThread1->CreateThread(); pThread2 = new Thread1(); pThread2->CreateThread(); ¡£¡£¡£¡£¡£¡£ } ΪIDR_MENUÖеIJ˵¥ÔÚFrame1ÖÐÉèÁ¢ÏìÓ¦º¯Êý£¬·½·¨Ò²ÊÇCtrl+w´ò¿ªÀàÏòµ¼¡£²¢ÔÚFrame1Öж¨ÒåÒ»¸öÈ«¾ÖÕûÐαäÁ¿n,³õʼֵΪ0. HANDLE handle=CreateSemaphore(NULL,0,1,"he"); WaitForSingleObject(handle,10000); CString str; n++; str.Format("µÚ%d´Î¹¤×÷",n); MessageBox(str); ReleaseSemaphore(handle,1,NULL); µ±Äãµã»÷Frame1µÄ²Ëµ¥Ê±£¬»áµ¯³öÒ»¸ö¶Ô»°¿ò£¬ÔÝʱ²»Òªµã È·¶¨£¬µã»÷ÁíÒ»¸öÏ̵߳IJ˵¥£¬Ôݲ»»áµ¯³ö¶Ô»°¿ò£¬È·¶¨¸Õ²ÅµÄ¶Ô»°¿ò£¬ÁíÒ»¸öÏ̵߳ĶԻ°¿òÒ²µ¯³öÀ´ÁË¡£ Õâ¸öͬ²½µÄ·½·¨³ÆÎªÐźÅÁ¿¡£ËüÔÊÐíÓÐÏÞµÄÏ̴߳æÈ¡Ä³¸ö¹²ÏíµÄϵͳ×ÊÔ´£¬²ÉÓüÆÊýÆ÷À´ÊµÏÖÐźÅÁ¿¡£ HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpa,LONG cSemInitial,LONG cSemMax,LPTSR lpszSemName); µÚÒ»¸ö²ÎÊýÀ´Ö¸Ã÷Ëù´´½¨µÄ¶ÔÏóÊÇ·ñ¿ÉÒÔ±»Æä×Ó½ø³Ì¼Ì³Ð¡£Èç¹ûÄãÏ£ÍûÔÚËùÓеÄ×Ó½ø³ÌÖ®¼ä¹²ÏíÕâ¸öÐźÅÁ¿£¬¿ÉÒÔ°ÑËüµÄ³ÉÔ±bInheritHandleÉèΪtrue,Ò²¿ÉÒÔÖ±½ÓÉèΪNULLÀ´Ê¹ÓÃĬÈϵݲȫÉèÖõڶþ¸ö²ÎÊýÊÇ»¹¿ÉÒÔÈü¸¸öÏß³ÌʹÓ㬵ÚÈý¸ö²ÎÊýÊÇ×î¶à¿ÉÒÔÈü¸¸öÏß³ÌʹÓᣠ×îºó²ÎÊýÊÇÐźÅÁ¿µÄÃû×Ö£¬ÔÚÆäËüµÄ½ø³ÌÖе÷ÓÃCreateSemapphore()»òOpenSemaphore()ʱʹÓÃÕâ¸ö×Ö·û´®×÷Ϊ²ÎÊýÖ®Ò»¾Í¿ÉÒԵõ½ÐźÅÁ¿µÄ¾ä±ú¡£ ReleaseSemaphore(HANDLE hSemaphore, LONG cRelease,LPLONG plPrev) µÚ¶þ¸ö±íʾһ´ÎÊͷż¸£¬ ÉÏһƪ:Îå ¶Ô»°¿ò ÏÂһƪ:Æß ¹¤¾ßÀ¸ ¡¡ |
|