source: trunk/synergy/lib/arch/CArchMultithreadOS2.h

Last change on this file was 2752, checked in by bird, 19 years ago

Two classes (CPMScreen and CPMKeyState) + the hook dll left (and debugging of course).

File size: 3.2 KB
Line 
1/*
2 * synergy -- mouse and keyboard sharing utility
3 * Copyright (C) 2002 Chris Schoeneman
4 *
5 * This package is free software you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * found in the file COPYING that should have accompanied this file.
8 *
9 * This package is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 */
14
15#ifndef CARCHMULTITHREADWINDOWS_H
16#define CARCHMULTITHREADWINDOWS_H
17
18#define INCL_DOS
19#define INCL_ERRORS
20#define INCL_PM
21#include "IArchMultithread.h"
22#include "stdlist.h"
23#include <os2emx.h>
24#include <sys/fmutex.h>
25
26#define ARCH_MULTITHREAD CArchMultithreadOS2
27
28class CArchCondImpl {
29public:
30 enum { kSignal = 0, kBroadcast };
31
32 HEV m_events[2];
33 mutable int m_waitCount;
34 CArchMutex m_waitCountMutex;
35};
36
37class CArchMutexImpl {
38public:
39 _fmutex m_mutex;
40};
41
42//! OS2 implementation of IArchMultithread
43class CArchMultithreadOS2 : public IArchMultithread {
44public:
45 CArchMultithreadOS2();
46 virtual ~CArchMultithreadOS2();
47
48 //! @name manipulators
49 //@{
50
51 void setNetworkDataForCurrentThread(void*);
52
53 //@}
54 //! @name accessors
55 //@{
56
57 HEV getCancelEventForCurrentThread();
58
59 void* getNetworkDataForThread(CArchThread);
60
61 static CArchMultithreadOS2* getInstance();
62
63 //@}
64
65 // IArchMultithread overrides
66 virtual CArchCond newCondVar();
67 virtual void closeCondVar(CArchCond);
68 virtual void signalCondVar(CArchCond);
69 virtual void broadcastCondVar(CArchCond);
70 virtual bool waitCondVar(CArchCond, CArchMutex, double timeout);
71 virtual CArchMutex newMutex();
72 virtual void closeMutex(CArchMutex);
73 virtual void lockMutex(CArchMutex);
74 virtual void unlockMutex(CArchMutex);
75 virtual CArchThread newThread(ThreadFunc, void*);
76 virtual CArchThread newCurrentThread();
77 virtual CArchThread copyThread(CArchThread);
78 virtual void closeThread(CArchThread);
79 virtual void cancelThread(CArchThread);
80 virtual void setPriorityOfThread(CArchThread, int n);
81 virtual void testCancelThread();
82 virtual bool wait(CArchThread, double timeout);
83 virtual bool isSameThread(CArchThread, CArchThread);
84 virtual bool isExitedThread(CArchThread);
85 virtual void* getResultOfThread(CArchThread);
86 virtual ThreadID getIDOfThread(CArchThread);
87 virtual void setSignalHandler(ESignal, SignalFunc, void*);
88 virtual void raiseSignal(ESignal);
89
90private:
91 CArchThreadImpl* find(int id);
92 CArchThreadImpl* findNoRef(int id);
93 CArchThreadImpl* findNoRefOrCreate(int id);
94 void insert(CArchThreadImpl* thread);
95 void erase(CArchThreadImpl* thread);
96
97 void refThread(CArchThreadImpl* rep);
98 void testCancelThreadImpl(CArchThreadImpl* rep);
99
100 void doThreadFunc(CArchThread thread);
101 static void threadFunc(void* vrep);
102
103private:
104 typedef std::list<CArchThread> CThreadList;
105
106 static CArchMultithreadOS2* s_instance;
107
108 CArchMutex m_threadMutex;
109
110 CThreadList m_threadList;
111 CArchThread m_mainThread;
112
113 SignalFunc m_signalFunc[kNUM_SIGNALS];
114 void* m_signalUserData[kNUM_SIGNALS];
115};
116
117typedef CArchMultithreadOS2 CArchMultithreadPosix;
118#endif
Note: See TracBrowser for help on using the repository browser.