/[svn]/linuxsampler/trunk/src/common/ConditionServer.cpp
ViewVC logotype

Annotation of /linuxsampler/trunk/src/common/ConditionServer.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 56 - (hide annotations) (download)
Tue Apr 27 09:21:58 2004 UTC (20 years ago) by schoenebeck
File size: 3011 byte(s)
updated copyright header for 2004

1 schoenebeck 53 /***************************************************************************
2     * *
3     * LinuxSampler - modular, streaming capable sampler *
4     * *
5 schoenebeck 56 * Copyright (C) 2003, 2004 by Benno Senoner and Christian Schoenebeck *
6 schoenebeck 53 * *
7     * This program is free software; you can redistribute it and/or modify *
8     * it under the terms of the GNU General Public License as published by *
9     * the Free Software Foundation; either version 2 of the License, or *
10     * (at your option) any later version. *
11     * *
12     * This program is distributed in the hope that it will be useful, *
13     * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15     * GNU General Public License for more details. *
16     * *
17     * You should have received a copy of the GNU General Public License *
18     * along with this program; if not, write to the Free Software *
19     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
20     * MA 02111-1307 USA *
21     ***************************************************************************/
22    
23     #include "ConditionServer.h"
24    
25     ConditionServer::ConditionServer() {
26     bConditionQuick = false;
27     bChangeRequest = false;
28     bOldCondition = false;
29     }
30    
31     bool* ConditionServer::Push(bool bCondition, long TimeoutSeconds, long TimeoutNanoSeconds) {
32     dmsg(3,("conditionserver:Push() requesting change to %d\n", bCondition));
33     PushMutex.Lock();
34     bOldCondition = bConditionQuick;
35     if (bConditionQuick != bCondition) {
36     bChangeRequest = bCondition;
37     int timeoutexceeded = SyncCondition.WaitAndUnlockIf(bOldCondition, TimeoutSeconds, TimeoutNanoSeconds); // wait until actually condition was changed on Pop() side
38     if (timeoutexceeded) return NULL;
39     }
40     return &bOldCondition;
41     }
42    
43     bool* ConditionServer::PushAndUnlock(bool bCondition, long TimeoutSeconds, long TimeoutNanoSeconds) {
44     bool* pBefore = Push(bCondition, TimeoutSeconds, TimeoutNanoSeconds);
45     Unlock();
46     return pBefore;
47     }
48    
49     void ConditionServer::Unlock() {
50     PushMutex.Unlock();
51     }
52    
53     bool ConditionServer::GetUnsafe() {
54     return bConditionQuick;
55     }
56    
57     bool ConditionServer::Pop() {
58     if (bConditionQuick == bChangeRequest) return bConditionQuick;
59     dmsg(3,("conditionserver:Pop() change requested\n"));
60     bConditionQuick = bChangeRequest;
61     SyncCondition.Set(bChangeRequest);
62     dmsg(3,("conditionserver:Pop() condition now: %d\n", bConditionQuick));
63     return bConditionQuick;
64     }

  ViewVC Help
Powered by ViewVC