Root/
Source at commit 1322 created 12 years 8 months ago. By meklort, Add doxygen to utils folder | |
---|---|
1 | /****************************************************************************␊ |
2 | **␊ |
3 | ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).␊ |
4 | ** Contact: Nokia Corporation (qt-info@nokia.com)␊ |
5 | **␊ |
6 | ** This file is part of the QtCore module of the Qt Toolkit.␊ |
7 | **␊ |
8 | ** $QT_BEGIN_LICENSE:LGPL$␊ |
9 | ** No Commercial Usage␊ |
10 | ** This file contains pre-release code and may not be distributed.␊ |
11 | ** You may use this file in accordance with the terms and conditions␊ |
12 | ** contained in the either Technology Preview License Agreement or the␊ |
13 | ** Beta Release License Agreement.␊ |
14 | **␊ |
15 | ** GNU Lesser General Public License Usage␊ |
16 | ** Alternatively, this file may be used under the terms of the GNU Lesser␊ |
17 | ** General Public License version 2.1 as published by the Free Software␊ |
18 | ** Foundation and appearing in the file LICENSE.LGPL included in the␊ |
19 | ** packaging of this file. Please review the following information to␊ |
20 | ** ensure the GNU Lesser General Public License version 2.1 requirements␊ |
21 | ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.␊ |
22 | **␊ |
23 | ** In addition, as a special exception, Nokia gives you certain␊ |
24 | ** additional rights. These rights are described in the Nokia Qt LGPL␊ |
25 | ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this␊ |
26 | ** package.␊ |
27 | **␊ |
28 | ** GNU General Public License Usage␊ |
29 | ** Alternatively, this file may be used under the terms of the GNU␊ |
30 | ** General Public License version 3.0 as published by the Free Software␊ |
31 | ** Foundation and appearing in the file LICENSE.GPL included in the␊ |
32 | ** packaging of this file. Please review the following information to␊ |
33 | ** ensure the GNU General Public License version 3.0 requirements will be␊ |
34 | ** met: http://www.gnu.org/copyleft/gpl.html.␊ |
35 | **␊ |
36 | ** If you are unsure which license is appropriate for your use, please␊ |
37 | ** contact the sales department at http://www.qtsoftware.com/contact.␊ |
38 | ** $QT_END_LICENSE$␊ |
39 | **␊ |
40 | ****************************************************************************/␊ |
41 | ␊ |
42 | #include <windows.h>␊ |
43 | ␊ |
44 | #include "qmutex.h"␊ |
45 | #include "qmutex_p.h"␊ |
46 | ␊ |
47 | QMutexPrivate::QMutexPrivate()␊ |
48 | : contenders(0)␊ |
49 | {␊ |
50 | event = CreateEvent(0, FALSE, FALSE, 0);␊ |
51 | if (!event)␊ |
52 | qWarning("QMutexPrivate::QMutexPrivate: Cannot create event");␊ |
53 | }␊ |
54 | ␊ |
55 | QMutexPrivate::~QMutexPrivate()␊ |
56 | {␊ |
57 | CloseHandle(event);␊ |
58 | }␊ |
59 | ␊ |
60 | void QMutexPrivate::wait()␊ |
61 | {␊ |
62 | WaitForSingleObject(event, INFINITE);␊ |
63 | }␊ |
64 | ␊ |
65 | void QMutexPrivate::wakeUp()␊ |
66 | {␊ |
67 | SetEvent(event);␊ |
68 | }␊ |
69 | ␊ |
70 | //----------------------------------------------------------------------␊ |
71 | ␊ |
72 | class QCriticalSection␊ |
73 | {␊ |
74 | public:␊ |
75 | QCriticalSection() { InitializeCriticalSection(§ion); }␊ |
76 | ~QCriticalSection() { DeleteCriticalSection(§ion); }␊ |
77 | void lock() { EnterCriticalSection(§ion); }␊ |
78 | void unlock() { LeaveCriticalSection(§ion); }␊ |
79 | ␊ |
80 | private:␊ |
81 | CRITICAL_SECTION section;␊ |
82 | };␊ |
83 | ␊ |
84 | static QCriticalSection qAtomicCriticalSection;␊ |
85 | ␊ |
86 | bool QAtomicInt::testAndSet(int expectedValue,int newValue)␊ |
87 | {␊ |
88 | bool returnValue = false;␊ |
89 | qAtomicCriticalSection.lock();␊ |
90 | if (m_value == expectedValue)␊ |
91 | {␊ |
92 | m_value = newValue;␊ |
93 | returnValue = true;␊ |
94 | }␊ |
95 | qAtomicCriticalSection.unlock();␊ |
96 | return returnValue;␊ |
97 | }␊ |
98 | ␊ |
99 | int QAtomicInt::fetchAndAdd(int valueToAdd)␊ |
100 | {␊ |
101 | int returnValue;␊ |
102 | qAtomicCriticalSection.lock();␊ |
103 | returnValue = m_value;␊ |
104 | m_value += valueToAdd;␊ |
105 | qAtomicCriticalSection.unlock();␊ |
106 | return returnValue;␊ |
107 | }␊ |
108 | ␊ |
109 |