File: processreaderthread.h

package info (click to toggle)
codelite 2.6.0.4189~dfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 30,868 kB
  • ctags: 32,563
  • sloc: cpp: 237,275; ansic: 20,775; lex: 2,114; yacc: 2,007; xml: 1,274; sh: 1,064; makefile: 566; python: 163
file content (132 lines) | stat: -rw-r--r-- 3,320 bytes parent folder | download
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//
// copyright            : (C) 2008 by Eran Ifrah
// file name            : worker_thread.h
//
// -------------------------------------------------------------------------
// A
//              _____           _      _     _ _
//             /  __ \         | |    | |   (_) |
//             | /  \/ ___   __| | ___| |    _| |_ ___
//             | |    / _ \ / _  |/ _ \ |   | | __/ _ )
//             | \__/\ (_) | (_| |  __/ |___| | ||  __/
//              \____/\___/ \__,_|\___\_____/_|\__\___|
//
//                                                  F i l e
//
//    This program is free software; you can redistribute it and/or modify
//    it under the terms of the GNU General Public License as published by
//    the Free Software Foundation; either version 2 of the License, or
//    (at your option) any later version.
//
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
#ifndef _ProcessReaderThread_H_
#define _ProcessReaderThread_H_

#include <deque>
#include "wx/thread.h"
#include "wx/event.h"

class IProcess;
/**
 * @class ProcessEventData
 * @author eran
 * @date 10/09/09
 * @file i_process.h
 * @brief
 */
class ProcessEventData
{
	wxString  m_data;
	IProcess *m_process;
	int       m_exitCode;

public:
	ProcessEventData() : m_exitCode(0) {}
	virtual ~ProcessEventData() {}

	void SetData(const wxString& data) {
		this->m_data = data.c_str();
	}
	const wxString& GetData() const {
		return m_data;
	}
	void SetProcess(IProcess* process) {
		this->m_process = process;
	}
	IProcess* GetProcess() {
		return m_process;
	}
	void SetExitCode(int exitCode) {
		this->m_exitCode = exitCode;
	}
	int GetExitCode() const {
		return m_exitCode;
	}
};

/**
 * Worker Thread class
 * usually user should define the ProcessRequest method
 */
class ProcessReaderThread : public wxThread
{
protected:
	wxEvtHandler *   m_notifiedWindow;
	IProcess*        m_process;
public:
	/**
	 * Default constructor.
	 */
	ProcessReaderThread();

	/**
	 * Destructor.
	 */
	virtual ~ProcessReaderThread();

	/**
	 * Thread execution point.
	 */
	virtual void *Entry();

	/**
	 * Called when the thread exits
	 * whether it terminates normally or is stopped with Delete() (but not when it is Kill()'ed!)
	 */
	virtual void OnExit() {};


	/**
	 * Set the window to be notified when a change was done
	 * between current source file tree and the actual tree.
	 * \param evtHandler
	 */
	void SetNotifyWindow( wxEvtHandler* evtHandler ) {
		m_notifiedWindow  = evtHandler;
	}

	/**
	 * Stops the thread
	 * This function returns only when the thread is terminated.
	 * \note This call must be called from the context of other thread (e.g. main thread)
	 */
	void Stop();

	/**
	 * Start the thread as joinable thread.
	 * \note This call must be called from the context of other thread (e.g. main thread)
	 */
	void Start(int priority = WXTHREAD_DEFAULT_PRIORITY);

	void SetProcess( IProcess *proc ) {
		m_process = proc;
	}
};

extern const wxEventType wxEVT_PROC_DATA_READ;
extern const wxEventType wxEVT_PROC_TERMINATED;

#endif // _ProcessReaderThread_H_