?? firealarm.cpp
字號:
#include <stdio.h>
#include <stdlib.h>
#include "CMcl.h"
#include "CSag.h"
class CSmokeDectector : public CMclThreadHandler {
private:
void (*m_pfnFireDetected)(void);
public:
CSmokeDectector(void (*pfnFireDetected)(void)) {
m_pfnFireDetected = pfnFireDetected;
};
unsigned ThreadHandlerProc() {
// for this example, we'll just wait 2 seconds
// and then report that we have detected a fire...
Sleep(2000);
printf("Detected Smoke!\n");
(*m_pfnFireDetected)();
// all done...
return 0;
};
};
class CHeatDectector : public CMclThreadHandler {
private:
void (*m_pfnFireDetected)(void);
public:
CHeatDectector(void (*pfnFireDetected)(void)) {
m_pfnFireDetected = pfnFireDetected;
};
unsigned ThreadHandlerProc() {
// for this example, we'll just wait 2 seconds
// and then report that we have detected a fire...
Sleep(2000);
printf("Detected Heat!\n");
(*m_pfnFireDetected)();
// all done...
return 0;
};
};
class CInfraRedDectector : public CMclThreadHandler {
private:
void (*m_pfnFireDetected)(void);
public:
CInfraRedDectector(void (*pfnFireDetected)(void)) {
m_pfnFireDetected = pfnFireDetected;
};
unsigned ThreadHandlerProc() {
// for this example, we'll just wait 2 seconds
// and then report that we have detected a fire...
Sleep(2000);
printf("Detected Infra-Red!\n");
(*m_pfnFireDetected)();
// all done...
return 0;
};
};
void SoundAlarm(void) {
printf( "Alarm! Alarm!\n");
}
void NotifyFireDepartment() {
// for this example pretend it takes 10 seconds
// to notify the fire department...
printf( "Calling Fire Department...\n");
Sleep(10000);
printf( "Notifed Fire Department!\n");
}
void FireDetected(void) {
static CSingleAdmissionGate csag;
// try to enter the single admission gate...
if (csag.Try() == FALSE) {
printf( "Fire already detected.\n");
return;
}
// sound the alarm and phone the fire department...
SoundAlarm();
NotifyFireDepartment();
// done...
csag.Leave();
}
int main( int argc, char *argv) {
// thread handlers...
CSmokeDectector chDetectSmokeHandler(FireDetected);
CHeatDectector chDetectHeatHandler(FireDetected);
CInfraRedDectector chDetectInfraRedHandler(FireDetected);
// thread auto-pointer objects...
CMclThreadAutoPtr ctDetectSmoke;
CMclThreadAutoPtr ctDetectHeat;
CMclThreadAutoPtr ctDetectInfraRed;
// create the threads...
ctDetectSmoke = new CMclThread( &chDetectSmokeHandler);
ctDetectHeat = new CMclThread( &chDetectHeatHandler);
ctDetectInfraRed = new CMclThread( &chDetectInfraRedHandler);
// wait for a fire...
CMclWaitableCollection dectectors;
dectectors.AddObject(*ctDetectSmoke);
dectectors.AddObject(*ctDetectHeat);
dectectors.AddObject(*ctDetectInfraRed);
dectectors.Wait( TRUE, INFINITE);
// done...
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -