source: trunk/src/tools/qcriticalsection_p.cpp@ 127

Last change on this file since 127 was 79, checked in by dmik, 19 years ago

Fixed QCriticalSection implementation on OS/2: it was really stupid to suppose that DosEnterCritSec = EnterCriticalSection w/o reading Win32 API docs and w/o searching for QCriticalSection usage within Qt; now mutex semaphores are used instead.

  • Property svn:keywords set to Id
File size: 2.7 KB
Line 
1/****************************************************************************
2** $Id: qcriticalsection_p.cpp 79 2006-04-05 19:18:34Z dmik $
3**
4** Implementation of QCriticalSection class
5**
6** Copyright (C) 2001 Trolltech AS. All rights reserved.
7**
8** This file is part of the tools module of the Qt GUI Toolkit.
9**
10** This file may be distributed under the terms of the Q Public License
11** as defined by Trolltech AS of Norway and appearing in the file
12** LICENSE.QPL included in the packaging of this file.
13**
14** This file may be distributed and/or modified under the terms of the
15** GNU General Public License version 2 as published by the Free Software
16** Foundation and appearing in the file LICENSE.GPL included in the
17** packaging of this file.
18**
19** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
20** licenses may use this file in accordance with the Qt Commercial License
21** Agreement provided with the Software.
22**
23** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
24** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
25**
26** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
27** information about Qt Commercial License Agreements.
28** See http://www.trolltech.com/qpl/ for QPL licensing information.
29** See http://www.trolltech.com/gpl/ for GPL licensing information.
30**
31** Contact info@trolltech.com if any conditions of this licensing are
32** not clear to you.
33**
34**********************************************************************/
35
36#if defined(QT_THREAD_SUPPORT)
37
38#include <private/qcriticalsection_p.h>
39
40#if defined(Q_WS_WIN)
41# include "qt_windows.h"
42#elif defined(Q_OS_OS2)
43# include "qt_os2.h"
44#endif
45
46class QCriticalSectionPrivate
47{
48public:
49 QCriticalSectionPrivate() {}
50
51#if defined(Q_WS_WIN)
52 CRITICAL_SECTION section;
53#elif defined(Q_OS_OS2)
54 HMTX mutex;
55#endif
56};
57
58QCriticalSection::QCriticalSection()
59{
60 d = new QCriticalSectionPrivate;
61#if defined(Q_WS_WIN)
62 InitializeCriticalSection( &d->section );
63#elif defined(Q_OS_OS2)
64 DosCreateMutexSem( NULL, &d->mutex, 0, FALSE );
65#endif
66}
67
68QCriticalSection::~QCriticalSection()
69{
70#if defined(Q_WS_WIN)
71 DeleteCriticalSection( &d->section );
72#elif defined(Q_OS_OS2)
73 DosCloseMutexSem( d->mutex );
74#endif
75 delete d;
76}
77
78void QCriticalSection::enter()
79{
80#if defined(Q_WS_WIN)
81 EnterCriticalSection( &d->section );
82#elif defined(Q_OS_OS2)
83 DosRequestMutexSem( d->mutex, SEM_INDEFINITE_WAIT );
84#endif
85}
86
87void QCriticalSection::leave()
88{
89#if defined(Q_WS_WIN)
90 LeaveCriticalSection( &d->section );
91#elif defined(Q_OS_OS2)
92 DosReleaseMutexSem( d->mutex );
93#endif
94}
95
96#endif
Note: See TracBrowser for help on using the repository browser.