12ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson// Copyright 2009 The RE2 Authors.  All Rights Reserved.
22ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson// Use of this source code is governed by a BSD-style
32ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson// license that can be found in the LICENSE file.
42ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
52ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#ifndef RE2_UTIL_THREAD_H__
62ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#define RE2_UTIL_THREAD_H__
72ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
82ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#include <pthread.h>
92ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
102ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonclass Thread {
112ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson public:
122ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Thread();
132ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  virtual ~Thread();
142ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  void Start();
152ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  void Join();
162ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  void SetJoinable(bool);
172ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  virtual void Run() = 0;
182ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
192ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson private:
202ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  pthread_t pid_;
212ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  bool running_;
222ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  bool joinable_;
232ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson};
242ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
252ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#endif  // RE2_UTIL_THREAD_H__
262ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
27