/*
 *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#ifndef WEBRTC_SYSTEM_WRAPPERS_SOURCE_THREAD_WIN_H_
#define WEBRTC_SYSTEM_WRAPPERS_SOURCE_THREAD_WIN_H_

#include "webrtc/system_wrappers/interface/thread_wrapper.h"

#include <windows.h>

#include "webrtc/base/thread_checker.h"

namespace webrtc {

class ThreadWindows : public ThreadWrapper {
 public:
  ThreadWindows(ThreadRunFunction func, void* obj, ThreadPriority prio,
                const char* thread_name);
  ~ThreadWindows() override;

  bool Start(unsigned int& id) override;
  bool Stop() override;

 protected:
  void Run();

 private:
  static DWORD WINAPI StartThread(void* param);

  ThreadRunFunction const run_function_;
  void* const obj_;
  bool stop_;
  // TODO(tommi): Consider having a SetPriority method instead of this variable.
  ThreadPriority prio_;
  HANDLE thread_;
  const std::string name_;
  rtc::ThreadChecker main_thread_;
};

}  // namespace webrtc

#endif  // WEBRTC_SYSTEM_WRAPPERS_SOURCE_THREAD_WIN_H_
