亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? simulation.cpp

?? window下的多線程編程參考書。值得一讀
?? CPP
字號(hào):
//
// FILE: Simulation.cpp
//
// Copyright (c) 1997 by Aaron Michael Cohen and Mike Woodring
//
/////////////////////////////////////////////////////////////////////////
#include "Simulation.h"

// CTable constructor...
CTable::CTable() {
    m_hwndGUI = NULL;
    m_bContinue = TRUE;
}

// CTable member functions...
void CTable::SetHwnd(HWND hwnd) {
    m_hwndGUI = hwnd;
}

void CTable::TakeForks(int nId) {
    m_cmForks[nId].WaitForTwo( m_cmForks[(nId + 1) % NUMBER_PHILOSOPHERS], TRUE, INFINITE);

    // we must update the interface AFTER we acquire the forks...
    NotifyParent( WM_DININGSIM_FORK_UPDATE, nId, FORK_STATE_UNAVAILABLE);
    NotifyParent( WM_DININGSIM_FORK_UPDATE, (nId + 1) % NUMBER_PHILOSOPHERS, FORK_STATE_UNAVAILABLE);
}

void CTable::DropForks(int nId) {
    // we must update the interface just BEFORE we release the forks...
    NotifyParent( WM_DININGSIM_FORK_UPDATE, nId, FORK_STATE_AVAILABLE);
    NotifyParent( WM_DININGSIM_FORK_UPDATE, (nId + 1) % NUMBER_PHILOSOPHERS, FORK_STATE_AVAILABLE);

    m_cmForks[nId].Release();
    m_cmForks[(nId + 1) % NUMBER_PHILOSOPHERS].Release();
}

BOOL CTable::Continue(void) {
    return m_bContinue;
}

void CTable::Stop(void) {
    m_bContinue = FALSE;
}

void CTable::Run(void) {
    m_bContinue = TRUE;
}

void CTable::NotifyParent( UINT uMsg, WPARAM wParam, LPARAM lParam) {
    // this is a post to make sure that the philosopher thread runs
    // asynchronously with the GUI,,,
    ::PostMessage( m_hwndGUI, uMsg, wParam, lParam);
}

// CPhilosopher constructor...
CPhilosopher::CPhilosopher( int nId, CTable *pt) : m_nId(nId), m_pTable(pt) {
    return;
}

// CPhilosopher member functions...
unsigned CPhilosopher::ThreadHandlerProc(void) {
    Philosophize();
    return 0;
}

void CPhilosopher::Philosophize(void) {
    // main philosopher Eat/Think loop,..
    while (m_pTable->Continue()) {
        // update the GUI that this philosopher is hungry...
        m_pTable->NotifyParent( WM_DININGSIM_PHILOSOPHER_UPDATE, m_nId, PHILOSOPHER_STATE_HUNGRY);           
        
        m_pTable->TakeForks(m_nId);            

        // update the GUI that this philosopher is eating...
        m_pTable->NotifyParent( WM_DININGSIM_PHILOSOPHER_UPDATE, m_nId, PHILOSOPHER_STATE_EATING);           
        Eat();
        
        m_pTable->DropForks(m_nId);

        // update the GUI that this philosopher is thinking...
        m_pTable->NotifyParent( WM_DININGSIM_PHILOSOPHER_UPDATE, m_nId, PHILOSOPHER_STATE_THINKING);           
        Think();
    }
}

void CPhilosopher::Think(void) {
    // think for a random period of time...
    Sleep((rand() % (MAXIMUM_THINKING_TIME - MINIMUM_THINKING_TIME)) + MINIMUM_THINKING_TIME);
}

void CPhilosopher::Eat(void) {
    // think for a random period of time...
    Sleep((rand() % (MAXIMUM_EATING_TIME - MINIMUM_EATING_TIME)) + MINIMUM_EATING_TIME);
}

// CPhilosopherThread constuctor creates the worker thread with the
// passed in thread handler...
CPhilosopherThread::CPhilosopherThread( CPhilosopher *pPhilosopher) : CMcl4MfcWorkerThread(pPhilosopher) {
    m_pPhilosopher = pPhilosopher;
}

// CPhilosopherThread destructor cleans up the thread handler...
CPhilosopherThread::~CPhilosopherThread() {
    delete m_pPhilosopher;
}

// CPhilosopherThread pseudo-virtual constructor...
CPhilosopherThread *CPhilosopherThread::CreatePhilosopher( int nId, CTable *pt) {
    CPhilosopher *pPhilosopher = new CPhilosopher( nId,pt);
    return new CPhilosopherThread(pPhilosopher);
}

// CSimulation member functions...
void CSimulation::SetHwnd(HWND hwnd) {
    // pass the HWND to the table object, which does the
    // actual posting of the messages...
    m_table.SetHwnd(hwnd);
}

void CSimulation::Run(void) {
    // put the table in the run state...
    m_table.Run();

    // create the philosophers and start them running...
    for (int i = 0; i < NUMBER_PHILOSOPHERS; i++) {
        m_cPhilosophers[i] = CPhilosopherThread::CreatePhilosopher( i, &m_table);
    }
}

void CSimulation::Stop(void) {
    // add the philsopher threads to a collection.,.
    CMclWaitableCollection collection;
    for (int i = 0; i < NUMBER_PHILOSOPHERS; i++) {
        collection.AddObject(*m_cPhilosophers[i]);
    }

    // tell the philosopher threads to exit...
    m_table.Stop();

    // wait until all the threads have terminated...
    collection.Wait( TRUE, INFINITE);
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日本韩国一区二区三区视频| 欧美一区二区三区四区视频 | 久久久久久免费网| 一本色道久久综合亚洲91| 另类专区欧美蜜桃臀第一页| 亚洲欧美一区二区在线观看| 欧美变态口味重另类| 91福利国产成人精品照片| 国产成人av一区二区三区在线| 亚洲一区二区精品3399| 国产精品麻豆久久久| 日韩欧美高清一区| 欧美日韩国产综合久久| 91丝袜呻吟高潮美腿白嫩在线观看| 久久精品国产精品亚洲精品| 亚洲制服丝袜在线| 国产精品灌醉下药二区| 久久亚洲影视婷婷| 欧美一区二区三区四区视频| 欧美在线不卡一区| 不卡一二三区首页| 成人禁用看黄a在线| 国产精品911| 国产主播一区二区| 免费成人结看片| 亚洲成人先锋电影| 亚洲一卡二卡三卡四卡五卡| 亚洲欧美经典视频| 中文字幕在线不卡一区二区三区| 久久久久久电影| 精品国产91洋老外米糕| 日韩精品在线看片z| 91精品国产欧美一区二区| 欧美日韩免费一区二区三区| 色哟哟一区二区| 色嗨嗨av一区二区三区| 一本色道久久加勒比精品 | 日韩理论片一区二区| 国产日本亚洲高清| 国产亚洲精品精华液| 国产亚洲自拍一区| 国产亚洲欧美中文| 国产拍揄自揄精品视频麻豆| 欧美激情在线观看视频免费| 久久九九久精品国产免费直播| 国产婷婷一区二区| 欧美国产1区2区| 亚洲人成网站在线| 亚洲电影一级黄| 麻豆91小视频| 国产精品996| 99re这里只有精品首页| 色国产精品一区在线观看| 91福利小视频| 91麻豆精品国产无毒不卡在线观看 | 亚洲h在线观看| 久久精品国产精品亚洲精品| 国产精品一区二区x88av| 国产毛片精品一区| 91亚洲精品久久久蜜桃网站| 欧美图片一区二区三区| 日韩欧美一级在线播放| 久久久久久一级片| 亚洲天堂av一区| 亚洲成在线观看| 激情小说亚洲一区| av一区二区三区| 欧美日韩在线电影| 久久这里只有精品首页| 亚洲视频精选在线| 青青草一区二区三区| 成人黄色一级视频| 欧美三区免费完整视频在线观看| 欧美成人vr18sexvr| 国产精品免费视频网站| 午夜精品123| 丁香网亚洲国际| 欧美日韩一区高清| 国产日韩精品一区二区三区在线| 亚洲一区视频在线| 国产精品一区在线| 欧美在线观看视频一区二区| 精品国产免费一区二区三区四区| 国产精品久久久久一区二区三区| 性欧美大战久久久久久久久| 国产福利91精品一区二区三区| 在线看日韩精品电影| 日韩精品资源二区在线| 亚洲免费视频成人| 国产综合成人久久大片91| 欧美性做爰猛烈叫床潮| 久久久影院官网| 亚欧色一区w666天堂| 9久草视频在线视频精品| 欧美一区二区在线播放| 亚洲人成网站色在线观看| 国产一区二区三区视频在线播放 | 久久免费美女视频| 午夜激情久久久| 97se亚洲国产综合自在线 | 中文字幕av一区二区三区高| 偷拍一区二区三区四区| 99久久综合国产精品| 欧美电影免费观看高清完整版在线观看 | 精品一区免费av| 欧美四级电影网| 成人欧美一区二区三区白人 | 欧美色倩网站大全免费| 国产精品视频在线看| 久久国产精品色| 欧美日韩国产123区| 亚洲欧美一区二区不卡| 国产成人精品免费看| 日韩免费成人网| 日本美女一区二区| 欧美少妇性性性| 亚洲自拍偷拍av| 97se亚洲国产综合在线| 国产精品视频yy9299一区| 美女爽到高潮91| 欧美一区二区三区在线| 亚洲一二三四区| 色欧美日韩亚洲| 亚洲欧美激情插 | 精品欧美久久久| 麻豆国产精品视频| 7777精品伊人久久久大香线蕉完整版 | 久久精品国产99| 欧美精选在线播放| 亚洲五月六月丁香激情| 日本高清视频一区二区| 亚洲三级小视频| 91丨porny丨中文| 亚洲精品国产一区二区精华液 | 日韩**一区毛片| 91精品国产一区二区三区蜜臀| 亚洲一区二区三区四区在线免费观看| 91麻豆精东视频| 亚洲观看高清完整版在线观看| 欧美在线制服丝袜| 亚洲成人午夜电影| 7777精品伊人久久久大香线蕉经典版下载| 亚洲国产成人av网| 欧美一区二区久久久| 久久草av在线| 久久精品亚洲乱码伦伦中文| 国产乱码精品1区2区3区| 国产蜜臀97一区二区三区| 国产成人午夜精品影院观看视频 | 国产xxx精品视频大全| 日本一区二区三区电影| 国产成人精品免费视频网站| 中文字幕在线免费不卡| 在线免费不卡视频| 日本免费在线视频不卡一不卡二| 欧美一级高清大全免费观看| 国产一二三精品| 中文字幕视频一区| 欧美视频一区二| 蜜臀a∨国产成人精品| 久久久国产精华| 91行情网站电视在线观看高清版| 午夜欧美视频在线观看| 欧美成人性福生活免费看| 成人性生交大片免费看中文网站| 亚洲美女免费在线| 欧美精品在线观看播放| 国产精品一线二线三线| 一区二区三区精品视频在线| 5566中文字幕一区二区电影 | 欧美精品少妇一区二区三区| 老司机免费视频一区二区| 日本一区二区三区四区在线视频 | 久久毛片高清国产| 色综合久久久久综合99| 日本不卡中文字幕| 国产精品人人做人人爽人人添 | 欧美日韩国产综合久久| 黑人巨大精品欧美黑白配亚洲| 中文字幕字幕中文在线中不卡视频| 欧美精品日韩综合在线| 国产成人啪免费观看软件| 一区二区高清视频在线观看| 91精品在线免费观看| 成人av综合在线| 日本不卡中文字幕| 亚洲乱码中文字幕综合| 欧美精品一区二区三区很污很色的 | 欧美电影免费观看高清完整版在| 99精品一区二区| 国产专区欧美精品| 亚洲成a人v欧美综合天堂| 国产亚洲人成网站| 欧美福利电影网| 97久久人人超碰| 国产原创一区二区| 三级欧美韩日大片在线看| 最新热久久免费视频| www欧美成人18+| 日韩一区二区电影网|