blob: 4fd7523ec9fb932acfe0de70383d5fb3535eba3d [file] [log] [blame]
niklase@google.comf0779a22011-05-30 11:39:38 +00001/*
2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#ifndef WEBRTC_SYSTEM_WRAPPERS_SOURCE_THREAD_WINDOWS_H_
12#define WEBRTC_SYSTEM_WRAPPERS_SOURCE_THREAD_WINDOWS_H_
13
14#include "thread_wrapper.h"
15#include "event_wrapper.h"
16#include "critical_section_wrapper.h"
17
18#include <windows.h>
19
20namespace webrtc {
21
22class ThreadWindows : public ThreadWrapper
23{
24public:
25 ThreadWindows(ThreadRunFunction func, ThreadObj obj, ThreadPriority prio,
26 const char* threadName);
27 virtual ~ThreadWindows();
28
29 virtual bool Start(unsigned int& id);
30 bool SetAffinity(const int* processorNumbers,
31 const unsigned int amountOfProcessors);
32 virtual bool Stop();
33 virtual void SetNotAlive();
34
35 static unsigned int WINAPI StartThread(LPVOID lpParameter);
36
37 virtual bool Shutdown();
38
39protected:
40 virtual void Run();
41
42private:
43 ThreadRunFunction _runFunction;
44 ThreadObj _obj;
45
46 bool _alive;
47 bool _dead;
48
49 // TODO (hellner)
50 // _doNotCloseHandle member seem pretty redundant. Should be able to remove
51 // it. Basically it should be fine to reclaim the handle when calling stop
52 // and in the destructor.
53 bool _doNotCloseHandle;
54 ThreadPriority _prio;
55 EventWrapper* _event;
56 CriticalSectionWrapper* _critsectStop;
57
58 HANDLE _thread;
59 unsigned int _id;
60 char _name[kThreadMaxNameLength];
61 bool _setThreadName;
62
63};
64} // namespace webrtc
65
66#endif // WEBRTC_SYSTEM_WRAPPERS_SOURCE_THREAD_WINDOWS_H_