forked from qt-creator/qt-creator
		
	
		
			
	
	
		
			50 lines
		
	
	
		
			1005 B
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			50 lines
		
	
	
		
			1005 B
		
	
	
	
		
			C
		
	
	
	
	
	
|   | #pragma once
 | ||
|  | 
 | ||
|  | #include <QThread>
 | ||
|  | #include <windows.h>
 | ||
|  | 
 | ||
|  | class WinDbgThread : protected QThread | ||
|  | { | ||
|  |     Q_OBJECT | ||
|  | public: | ||
|  |     WinDbgThread(QObject* parent = 0); | ||
|  |     ~WinDbgThread(); | ||
|  | 
 | ||
|  |     void startProcess(const QString& filename); | ||
|  |     void attachToProcess(DWORD processId); | ||
|  |     void continueProcess(); | ||
|  |     void pauseProcess(); | ||
|  |     void stopProcess(); | ||
|  |     const QString& processFileName() { return m_processFileName; } | ||
|  | 
 | ||
|  |     QObject* asQObject() { return this; } | ||
|  |     //using QThread::isRunning;
 | ||
|  | 
 | ||
|  | signals: | ||
|  |     void debugEventOccured(void*); | ||
|  | 
 | ||
|  | protected: | ||
|  |     void run(); | ||
|  | 
 | ||
|  | private: | ||
|  |     void internalStartProcess(); | ||
|  |     void suspend(); | ||
|  |     void resume(); | ||
|  | 
 | ||
|  |     enum State { | ||
|  |         Idle, | ||
|  |         ProcessRunning, | ||
|  |         ProcessPaused | ||
|  |     }; | ||
|  | 
 | ||
|  |     void setState(State s); | ||
|  | 
 | ||
|  | private: | ||
|  |     State               m_state; | ||
|  |     QString             m_processFileName; | ||
|  |     HANDLE              m_hThisThread; | ||
|  |     PROCESS_INFORMATION m_pi; | ||
|  |     bool                m_bOwnsProcess; | ||
|  |     bool                m_bAbortEventPollingLoop; | ||
|  | }; |