Deskflow 1.22.0.197
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
ArchMultithreadWindows.h
Go to the documentation of this file.
1/*
2 * Deskflow -- mouse and keyboard sharing utility
3 * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd.
4 * SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman
5 * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
6 */
7
8#pragma once
9
11
12#include <list>
13#include <mutex>
14
15#define WIN32_LEAN_AND_MEAN
16#include <Windows.h>
17
18#define ARCH_MULTITHREAD ArchMultithreadWindows
19
20class ArchCondImpl
21{
22public:
23 enum
24 {
27 };
28
29 HANDLE m_events[2];
30 mutable int m_waitCount;
32};
33
34class ArchMutexImpl
35{
36public:
37 CRITICAL_SECTION m_mutex;
38};
39
42{
43public:
45 ~ArchMultithreadWindows() override;
46
48
49
51
53
55
57
59
61
63
64 // IArchMultithread overrides
65 ArchCond newCondVar() override;
66 void closeCondVar(ArchCond) override;
67 void signalCondVar(ArchCond) override;
68 void broadcastCondVar(ArchCond) override;
69 bool waitCondVar(ArchCond, ArchMutex, double timeout) override;
70 ArchMutex newMutex() override;
71 void closeMutex(ArchMutex) override;
72 void lockMutex(ArchMutex) override;
73 void unlockMutex(ArchMutex) override;
74 ArchThread newThread(ThreadFunc, void *) override;
77 void closeThread(ArchThread) override;
78 void cancelThread(ArchThread) override;
79 void setPriorityOfThread(ArchThread, int n) override;
80 void testCancelThread() override;
81 bool wait(ArchThread, double timeout) override;
82 bool isSameThread(ArchThread, ArchThread) override;
83 bool isExitedThread(ArchThread) override;
84 void *getResultOfThread(ArchThread) override;
86 void setSignalHandler(ThreadSignal, SignalFunc, void *) override;
87 void raiseSignal(ThreadSignal) override;
88
89private:
90 ArchThreadImpl *find(DWORD id);
91 ArchThreadImpl *findNoRef(DWORD id);
92 ArchThreadImpl *findNoRefOrCreate(DWORD id);
93 void insert(ArchThreadImpl *thread);
94 void erase(ArchThreadImpl *thread);
95
96 void refThread(ArchThreadImpl *rep);
97 void testCancelThreadImpl(ArchThreadImpl *rep);
98
99 void doThreadFunc(ArchThread thread);
100 static unsigned int __stdcall threadFunc(void *vrep);
101
102private:
103 using ThreadList = std::list<ArchThread>;
104
105 static ArchMultithreadWindows *s_instance;
106
107 std::mutex m_threadMutex;
108
109 ThreadList m_threadList;
110 ArchThread m_mainThread;
111
112 SignalFunc m_signalFunc[static_cast<int>(ThreadSignal::MaxSignals)];
113 void *m_signalUserData[static_cast<int>(ThreadSignal::MaxSignals)];
114};
static const WSAEVENT FAR DWORD
Definition ArchNetworkWinsock.cpp:54
static fd_set FAR fd_set FAR fd_set FAR const struct timeval FAR * timeout
Definition ArchNetworkWinsock.cpp:39
ArchThreadImpl * ArchThread
Opaque thread type. An opaque type representing a thread.
Definition IArchMultithread.h:53
ArchMutexImpl * ArchMutex
Opaque mutex type. An opaque type representing a mutex.
Definition IArchMultithread.h:39
ArchCondImpl * ArchCond
Opaque condition variable type. An opaque type representing a condition variable.
Definition IArchMultithread.h:25
Internal condition variable data. An architecture dependent type holding the necessary data for a con...
Definition ArchMultithreadPosix.h:19
HANDLE m_events[2]
Definition ArchMultithreadWindows.h:29
@ kSignal
Definition ArchMultithreadWindows.h:25
@ kBroadcast
Definition ArchMultithreadWindows.h:26
ArchMutex m_waitCountMutex
Definition ArchMultithreadWindows.h:31
int m_waitCount
Definition ArchMultithreadWindows.h:30
static ArchMultithreadWindows * getInstance()
Definition ArchMultithreadWindows.cpp:128
void testCancelThread() override
Cancellation point.
Definition ArchMultithreadWindows.cpp:389
void setSignalHandler(ThreadSignal, SignalFunc, void *) override
Set the interrupt handler.
Definition ArchMultithreadWindows.cpp:477
void signalCondVar(ArchCond) override
Signal a condition variable.
Definition ArchMultithreadWindows.cpp:151
void closeCondVar(ArchCond) override
Destroy a condition variable.
Definition ArchMultithreadWindows.cpp:143
void closeThread(ArchThread) override
Release a thread reference.
Definition ArchMultithreadWindows.cpp:294
ArchMutex newMutex() override
Create a recursive mutex.
Definition ArchMultithreadWindows.cpp:232
HANDLE getCancelEventForCurrentThread()
Definition ArchMultithreadWindows.cpp:121
void raiseSignal(ThreadSignal) override
Invoke the signal handler.
Definition ArchMultithreadWindows.cpp:485
void setPriorityOfThread(ArchThread, int n) override
Change thread priority.
Definition ArchMultithreadWindows.cpp:331
bool wait(ArchThread, double timeout) override
Wait for a thread to exit.
Definition ArchMultithreadWindows.cpp:399
ArchThread newCurrentThread() override
Get a reference to the calling thread.
Definition ArchMultithreadWindows.cpp:286
void lockMutex(ArchMutex) override
Lock a mutex.
Definition ArchMultithreadWindows.cpp:245
void * getResultOfThread(ArchThread) override
Returns the exit code of a thread.
Definition ArchMultithreadWindows.cpp:466
ThreadID getIDOfThread(ArchThread) override
Returns an ID for a thread.
Definition ArchMultithreadWindows.cpp:472
ArchThread copyThread(ArchThread) override
Copy a thread object.
Definition ArchMultithreadWindows.cpp:317
ArchMultithreadWindows()
Definition ArchMultithreadWindows.cpp:77
void unlockMutex(ArchMutex) override
Unlock a mutex.
Definition ArchMultithreadWindows.cpp:250
void closeMutex(ArchMutex) override
Destroy a mutex.
Definition ArchMultithreadWindows.cpp:239
void * getNetworkDataForThread(ArchThread)
Definition ArchMultithreadWindows.cpp:115
ArchThread newThread(ThreadFunc, void *) override
Start a new thread.
Definition ArchMultithreadWindows.cpp:255
void setNetworkDataForCurrentThread(void *)
Definition ArchMultithreadWindows.cpp:108
~ArchMultithreadWindows() override
Definition ArchMultithreadWindows.cpp:98
void broadcastCondVar(ArchCond) override
Broadcast a condition variable.
Definition ArchMultithreadWindows.cpp:164
ArchCond newCondVar() override
Create a condition variable.
Definition ArchMultithreadWindows.cpp:133
bool isSameThread(ArchThread, ArchThread) override
Compare threads.
Definition ArchMultithreadWindows.cpp:455
void cancelThread(ArchThread) override
Force a thread to exit.
Definition ArchMultithreadWindows.cpp:323
bool isExitedThread(ArchThread) override
Test if thread exited.
Definition ArchMultithreadWindows.cpp:460
bool waitCondVar(ArchCond, ArchMutex, double timeout) override
Wait on a condition variable.
Definition ArchMultithreadWindows.cpp:177
Internal mutex data. An architecture dependent type holding the necessary data for a mutex.
Definition ArchMultithreadPosix.h:25
pthread_mutex_t m_mutex
Definition ArchMultithreadPosix.h:27
Internal thread data. An architecture dependent type holding the necessary data for a thread.
Definition ArchMultithreadPosix.cpp:34
Interface for architecture dependent multithreading.
Definition IArchMultithread.h:61
void *(*)(void *) ThreadFunc
Type of thread entry point.
Definition IArchMultithread.h:64
unsigned int ThreadID
Type of thread identifier.
Definition IArchMultithread.h:66
void(*)(ThreadSignal, void *userData) SignalFunc
Type of signal handler function.
Definition IArchMultithread.h:81
ThreadSignal
Types of signals.
Definition IArchMultithread.h:73
@ MaxSignals
Number of differnt signals.
Definition IArchMultithread.h:78