📄 glutblocker.cpp
字号:
/*********************************************************** * Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby. * * This program is freely distributable without licensing fees * and is provided without guarantee or warrantee expressed or * implied. This program is -not- in the public domain. * * FILE: glutBlocker.cpp * * DESCRIPTION: helper class for GLUT event loop. * if a window receives an event, wake up the event loop. ***********************************************************//*********************************************************** * Headers ***********************************************************/#include "glutBlocker.h"/*********************************************************** * Global variable ***********************************************************/GlutBlocker gBlock;/*********************************************************** * Member functions ***********************************************************/GlutBlocker::GlutBlocker() { gSem = create_sem(1, "gSem"); eSem = create_sem(0, "eSem"); events = false; sleeping = false;}GlutBlocker::~GlutBlocker() { delete_sem(eSem); delete_sem(gSem);}void GlutBlocker::WaitEvent() { acquire_sem(gSem); if(!events) { // wait for new event sleeping = true; release_sem(gSem); acquire_sem(eSem); // next event will release eSem } else { release_sem(gSem); }}void GlutBlocker::WaitEvent(bigtime_t usecs) { acquire_sem(gSem); if(!events) { // wait for new event sleeping = true; release_sem(gSem); acquire_sem_etc(eSem, 1, B_TIMEOUT, usecs); // wait for next event or timeout } else { release_sem(gSem); }}void GlutBlocker::NewEvent() { acquire_sem(gSem); events = true; // next call to WaitEvent returns immediately if(sleeping) { sleeping = false; release_sem(eSem); // if event loop is blocking, wake it up } release_sem(gSem);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -