source: vendor/synergy/current/lib/arch/CArchMultithreadPosix.h

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

synergy v1.3.1 sources (zip).

File size: 3.1 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 CARCHMULTITHREADPOSIX_H
16#define CARCHMULTITHREADPOSIX_H
17
18#include "IArchMultithread.h"
19#include "stdlist.h"
20#include <pthread.h>
21
22#define ARCH_MULTITHREAD CArchMultithreadPosix
23
24class CArchCondImpl {
25public:
26 pthread_cond_t m_cond;
27};
28
29class CArchMutexImpl {
30public:
31 pthread_mutex_t m_mutex;
32};
33
34//! Posix implementation of IArchMultithread
35class CArchMultithreadPosix : public IArchMultithread {
36public:
37 CArchMultithreadPosix();
38 virtual ~CArchMultithreadPosix();
39
40 //! @name manipulators
41 //@{
42
43 void setNetworkDataForCurrentThread(void*);
44
45 //@}
46 //! @name accessors
47 //@{
48
49 void* getNetworkDataForThread(CArchThread);
50
51 static CArchMultithreadPosix* getInstance();
52
53 //@}
54
55 // IArchMultithread overrides
56 virtual CArchCond newCondVar();
57 virtual void closeCondVar(CArchCond);
58 virtual void signalCondVar(CArchCond);
59 virtual void broadcastCondVar(CArchCond);
60 virtual bool waitCondVar(CArchCond, CArchMutex, double timeout);
61 virtual CArchMutex newMutex();
62 virtual void closeMutex(CArchMutex);
63 virtual void lockMutex(CArchMutex);
64 virtual void unlockMutex(CArchMutex);
65 virtual CArchThread newThread(ThreadFunc, void*);
66 virtual CArchThread newCurrentThread();
67 virtual CArchThread copyThread(CArchThread);
68 virtual void closeThread(CArchThread);
69 virtual void cancelThread(CArchThread);
70 virtual void setPriorityOfThread(CArchThread, int n);
71 virtual void testCancelThread();
72 virtual bool wait(CArchThread, double timeout);
73 virtual bool isSameThread(CArchThread, CArchThread);
74 virtual bool isExitedThread(CArchThread);
75 virtual void* getResultOfThread(CArchThread);
76 virtual ThreadID getIDOfThread(CArchThread);
77 virtual void setSignalHandler(ESignal, SignalFunc, void*);
78 virtual void raiseSignal(ESignal);
79
80private:
81 void startSignalHandler();
82
83 CArchThreadImpl* find(pthread_t thread);
84 CArchThreadImpl* findNoRef(pthread_t thread);
85 void insert(CArchThreadImpl* thread);
86 void erase(CArchThreadImpl* thread);
87
88 void refThread(CArchThreadImpl* rep);
89 void testCancelThreadImpl(CArchThreadImpl* rep);
90
91 void doThreadFunc(CArchThread thread);
92 static void* threadFunc(void* vrep);
93 static void threadCancel(int);
94 static void* threadSignalHandler(void* vrep);
95
96private:
97 typedef std::list<CArchThread> CThreadList;
98
99 static CArchMultithreadPosix* s_instance;
100
101 bool m_newThreadCalled;
102
103 CArchMutex m_threadMutex;
104 CArchThread m_mainThread;
105 CThreadList m_threadList;
106 ThreadID m_nextID;
107
108 pthread_t m_signalThread;
109 SignalFunc m_signalFunc[kNUM_SIGNALS];
110 void* m_signalUserData[kNUM_SIGNALS];
111};
112
113#endif
Note: See TracBrowser for help on using the repository browser.