科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件Visual C++中的多线程

Visual C++中的多线程

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文简单地讲解了VC++的多线程,一般来说,在C++里面创建和终止线程的函数为:_beginthread和_endthread两个函数,当然,也可以用CreateThread和ExitThread。

作者:JerryCircle 来源:Csdn博客 2007年9月14日

关键字: Visual C++ 多线程

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共19页)

ÒÔÇ°£¬Ôø¾­Ñо¿¹ýÁËjavaÖеĶàÏß³ÌÎÊÌ⣬ÌرðÊǼÓËøºÍͬ²½ÎÊÌ⣬µ«ÊÇ£¬ÔÚC++ÖУ¬È·Ã»ÓÐÕâô¼òµ¥ÁË¡£ÓÉÓÚCûÓÐÌṩÏñjavaÀïµÄÏß³ÌÀ࣬һЩͬ²½µÄʵÏÖ±ØÐë¿¿×Ô¼º³ÌÐòʵÏÖ£¬ÉÔÏÔ¸´ÔÓ¡£

Ò»°ãÀ´Ëµ£¬ÔÚC++ÀïÃæ´´½¨ºÍÖÕÖ¹Ï̵߳ĺ¯ÊýΪ£º_beginthreadºÍ_endthreadÁ½¸öº¯Êý£¬µ±È»£¬Ò²¿ÉÒÔÓÃCreateThreadºÍExitThread¡£¾ßÌåµÄʹÓ÷½Ê½¿ÉÒԲ鿴msdn¡£

ÄÇô£¬ÔõôÑùʵÏÖ¼ÓËøÓëͬ²½ÄØ£¿¿ÉÒÔʹÓÃcreateMutexº¯ÊýÒÔ¼°createEvent·½·¨µÈÀ´ÊµÏÖ£¬¾ßÌå¿ÉÒԲο¼ÏÂÀý£º

#include < iostream>

#include 
< windows.h>



using namespace std;

#define BUFSIZE 5

int SharedBuffer[BUFSIZE];

int head,tail;

int count;

HANDLE hMutex;

HANDLE hNotFullEvent, hNotEmptyEvent;

void BB_Producer()

{

int i;

for (i=20; i>=0; i--{

while(1{

WaitForSingleObject(hMutex,INFINITE);

if (count == BUFSIZE) // »º³åÇøÂú

ReleaseMutex(hMutex);

// µÈ´ýÖ±µ½»º³åÇø·ÇÂú

WaitForSingleObject(hNotFullEvent,INFINITE);

continue;

}


// µÃµ½»¥³âËøÇÒ»º³åÇø·ÇÂú,Ìø³öwhileÑ­»·

break;

}


// µÃµ½»¥³âËøÇÒ»º³åÇø·ÇÂú,¿ªÊ¼²úÉúÐÂÊý¾Ý

cout << "Produce: " << i << endl;

SharedBuffer[tail] 
= i;

tail 
= (tail+1% BUFSIZE;

count
++;

ReleaseMutex(hMutex); 
// ½áÊøÁÙ½çÇø

PulseEvent(hNotEmptyEvent); // »½ÐÑÏû·ÑÕßÏß³Ì

}


}


void BB_Consumer()

{

int result;

while (1{

WaitForSingleObject(hMutex,INFINITE);

if (count == 0// Ã»ÓпÉÒÔ´¦ÀíµÄÊý¾Ý

ReleaseMutex(hMutex); // ÊÍ·Å»¥³âËøÇҵȴý

// µÈ´ýÖ±µ½»º³åÇø·Ç¿Õ

WaitForSingleObject(hNotEmptyEvent,INFINITE);

}


else if (SharedBuffer[head] == 0{

cout 
<< "Consumed 0: end of data" << endl;

ReleaseMutex(hMutex); 
// ½áÊøÁÙ½çÇø

ExitThread(0);

}


else // »ñµÃ»¥³âËøÇÒ»º³åÇøÓÐÊý¾Ý,¿ªÊ¼´¦Àí

result = SharedBuffer[head];

cout 
<< "Consumed: " << result << endl;

head 
= (head+1% BUFSIZE;

count
--;

ReleaseMutex(hMutex); 
// ½áÊøÁÙ½çÇø

PulseEvent(hNotFullEvent); // »½ÐÑÉú²úÕßÏß³Ì

}


}


}


void main()

{

HANDLE hThreadVector[
2];

DWORD ThreadID;

count 
= 0;

head 
= 0;

tail 
= 0;

hMutex 
= CreateMutex(NULL,FALSE,NULL);

hNotFullEvent 
= CreateEvent(NULL,TRUE,FALSE,NULL);

hNotEmptyEvent 
= CreateEvent(NULL,TRUE,FALSE,NULL);

hThreadVector[
0= CreateThread (NULL, 0,

(LPTHREAD_START_ROUTINE) BB_Producer,

NULL, 
0, (LPDWORD)&ThreadID);

hThreadVector[
1= CreateThread (NULL, 0,

(LPTHREAD_START_ROUTINE) BB_Consumer,

NULL, 
0, (LPDWORD)&ThreadID);

WaitForMultipleObjects(
2,hThreadVector,TRUE,INFINITE);

}

ÕâÊÇÒ»¸öµäÐ͵ÄÉú²úÕß-Ïû·ÑÕßÎÊÌ⣬ËüÃǹ«ÓõÄ×ÊÔ´ÊÇSharedBuffer£¬µ±BufferÖÐÓÐÊý¾ÝÇÒδÂúʱ£¬Á½¸öÏ̶߳¼¿ÉÒÔÔËÐУ¬µ±BufferΪ¿Õʱ£¬Consumer¾ÍÒªµÈ´ý£¬Ö±µ½Buffer²»Îª¿Õ£¬ÕâÀï¾ÍÊÇÓÃeventÀ´ÊµÏֵģ»Í¬Ñù£¬µ±BufferΪÂúʱ£¬Producer¾ÍÒªµÈ´ý¡£

²é¿´±¾ÎÄÀ´Ô´

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章