File: thread.h

package info (click to toggle)
postal 0.73
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 532 kB
  • sloc: cpp: 4,197; sh: 289; ansic: 258; makefile: 134
file content (76 lines) | stat: -rw-r--r-- 1,505 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#ifndef THREAD_H
#define THREAD_H

#include "port.h"

#include <sys/poll.h>
#include <pthread.h>

class Thread;

typedef void *PVOID;

typedef struct
{
  Thread *f;
  PVOID param;
  int threadNum;
} THREAD_DATA;

class Thread
{
protected:
  // Virtual function that is called when the thread is started.
  // The parameter is the pointer that is passed first to the go() function
  virtual int action(PVOID param) = 0;

  // constructor for main thread class
  Thread();

  // constructor for children.
  Thread(int threadNum, const Thread *parent);
  virtual ~Thread();

  void go(PVOID param, int num); // creates all threads

  int getNumThreads() const { return m_numThreads; }

  // Virtual function to construct a new class.
  // the following comment has the implementation
  // return new class(threadNum, this);
  virtual Thread *newThread(int threadNum) = 0;

  // set the return value of the thread, probably not needed
  void setRetVal(int rc);

protected:
  int getThreadNum() const { return m_threadNum; }
  int Read(PVOID buf, int size, int timeout = 60);
  int Write(PVOID buf, int size, int timeout = 60);

protected:
  int m_read;
  int m_write;
private:

  int m_threadNum;

  pollfd m_readPoll;
  pollfd m_writePoll;
  int m_parentRead;
  int m_parentWrite;
  int m_childRead;
  int m_childWrite;
  int m_numThreads;
  int *m_retVal;
  pthread_t *m_thread_info;

  Thread(const Thread &f);
  Thread & operator =(const Thread &f);


  friend PVOID thread_func(PVOID param);
};

#endif