barrier/lib/arch/IArchMultithread.h

81 lines
2.3 KiB
C++

/*
* synergy -- mouse and keyboard sharing utility
* Copyright (C) 2002 Chris Schoeneman
*
* This package is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* found in the file COPYING that should have accompanied this file.
*
* This package is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef IARCHMULTITHREAD_H
#define IARCHMULTITHREAD_H
#include "IInterface.h"
class CArchCondImpl;
class CArchMutexImpl;
class CArchThreadImpl;
typedef CArchCondImpl* CArchCond;
typedef CArchMutexImpl* CArchMutex;
typedef CArchThreadImpl* CArchThread;
//! Interface for architecture dependent multithreading
/*!
This interface defines the multithreading operations required by
synergy. Each architecture must implement this interface.
*/
class IArchMultithread : public IInterface {
public:
typedef void* (*ThreadFunc)(void*);
typedef unsigned int ThreadID;
//! @name manipulators
//@{
//
// condition variable methods
//
virtual CArchCond newCondVar() = 0;
virtual void closeCondVar(CArchCond) = 0;
virtual void signalCondVar(CArchCond) = 0;
virtual void broadcastCondVar(CArchCond) = 0;
virtual bool waitCondVar(CArchCond, CArchMutex, double timeout) = 0;
//
// mutex methods
//
virtual CArchMutex newMutex() = 0;
virtual void closeMutex(CArchMutex) = 0;
virtual void lockMutex(CArchMutex) = 0;
virtual void unlockMutex(CArchMutex) = 0;
//
// thread methods
//
virtual CArchThread newThread(ThreadFunc, void*) = 0;
virtual CArchThread newCurrentThread() = 0;
virtual CArchThread copyThread(CArchThread) = 0;
virtual void closeThread(CArchThread) = 0;
virtual void cancelThread(CArchThread) = 0;
virtual void setPriorityOfThread(CArchThread, int n) = 0;
virtual void testCancelThread() = 0;
virtual bool wait(CArchThread, double timeout) = 0;
virtual bool waitForEvent(double timeout) = 0;
virtual bool isSameThread(CArchThread, CArchThread) = 0;
virtual bool isExitedThread(CArchThread) = 0;
virtual void* getResultOfThread(CArchThread) = 0;
virtual ThreadID getIDOfThread(CArchThread) = 0;
//@}
};
#endif