jack2 codebase
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

94 lines
2.8KB

  1. /*
  2. Copyright (C) 2004-2008 Grame
  3. This program is free software; you can redistribute it and/or modify
  4. it under the terms of the GNU Lesser General Public License as published by
  5. the Free Software Foundation; either version 2.1 of the License, or
  6. (at your option) any later version.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU Lesser General Public License for more details.
  11. You should have received a copy of the GNU Lesser General Public License
  12. along with this program; if not, write to the Free Software
  13. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  14. */
  15. #ifndef __JackWinThread__
  16. #define __JackWinThread__
  17. #include "JackThread.h"
  18. #include "JackCompilerDeps.h"
  19. #include "JackSystemDeps.h"
  20. #include <windows.h>
  21. namespace Jack
  22. {
  23. typedef DWORD (WINAPI *ThreadCallback)(void *arg);
  24. /*!
  25. \brief Windows threads.
  26. */
  27. class SERVER_EXPORT JackWinThread : public detail::JackThreadInterface
  28. {
  29. private:
  30. HANDLE fThread;
  31. HANDLE fEvent;
  32. static DWORD WINAPI ThreadHandler(void* arg);
  33. public:
  34. JackWinThread(JackRunnableInterface* runnable);
  35. ~JackWinThread();
  36. int Start();
  37. int StartSync();
  38. int Kill();
  39. int Stop();
  40. void Terminate();
  41. int AcquireRealTime(); // Used when called from another thread
  42. int AcquireSelfRealTime(); // Used when called from thread itself
  43. int AcquireRealTime(int priority); // Used when called from another thread
  44. int AcquireSelfRealTime(int priority); // Used when called from thread itself
  45. int DropRealTime(); // Used when called from another thread
  46. int DropSelfRealTime(); // Used when called from thread itself
  47. pthread_t GetThreadID();
  48. bool IsThread();
  49. static int AcquireRealTimeImp(pthread_t thread, int priority);
  50. static int AcquireRealTimeImp(pthread_t thread, int priority, UInt64 period, UInt64 computation, UInt64 constraint)
  51. {
  52. return JackWinThread::AcquireRealTimeImp(thread, priority);
  53. }
  54. static int DropRealTimeImp(pthread_t thread);
  55. static int StartImp(pthread_t* thread, int priority, int realtime, void*(*start_routine)(void*), void* arg)
  56. {
  57. return JackWinThread::StartImp(thread, priority, realtime, (ThreadCallback) start_routine, arg);
  58. }
  59. static int StartImp(pthread_t* thread, int priority, int realtime, ThreadCallback start_routine, void* arg);
  60. static int StopImp(pthread_t thread);
  61. static int KillImp(pthread_t thread);
  62. };
  63. SERVER_EXPORT void ThreadExit();
  64. } // end of namespace
  65. #endif