⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 conredirect.h

📁 用于开发Atmel的AVR系列单片机的GCC集成开发环境
💻 H
字号:
//---------------------------------------------------------------------------
#ifndef ConRedirectH
#define ConRedirectH
//---------------------------------------------------------------------------
#include <vcl\SysUtils.hpp>
#include <vcl\Controls.hpp>
#include <vcl\Classes.hpp>
#include <vcl\Forms.hpp>

#define BUFFER_SIZE 16384 // Size of Buffer in StdOut and StdErr Thread

typedef void __fastcall (__closure *TStdReadEvent)(char *buffer, int len);
typedef void __fastcall (__closure *TChildExitEvent)(int exitcode);
//---------------------------------------------------------------------------
class TStdOutThread : public TThread
{
private:
    TStdReadEvent FOnStdOut;
    void __fastcall StdOutWrap (void);
    char buffer[BUFFER_SIZE + 1];
    DWORD length;

protected:
    void __fastcall Execute();

public:
    __fastcall TStdOutThread(bool CreateSuspended);
    HANDLE StdOutRead;

__published:
    __property TStdReadEvent OnStdOut = {read=FOnStdOut, write=FOnStdOut};
};
//---------------------------------------------------------------------------
class TStdErrThread : public TThread
{
private:
    TStdReadEvent FOnStdErr;
    void __fastcall StdErrWrap (void);
    char buffer[BUFFER_SIZE + 1];
    DWORD length;

protected:
    void __fastcall Execute();

public:
    __fastcall TStdErrThread(bool CreateSuspended);
    HANDLE StdErrRead;

__published:
    __property TStdReadEvent OnStdErr = {read=FOnStdErr, write=FOnStdErr};
};
//---------------------------------------------------------------------------
class TMonThread : public TThread
{
private:
    TChildExitEvent FOnChildExit;
    void __fastcall ChildExitWrap (void);
    DWORD exitcode;

protected:
    void __fastcall Execute();

public:
    __fastcall TMonThread(bool CreateSuspended);
    HANDLE ChildProcess;

__published:
    __property TChildExitEvent OnChildExit = {read=FOnChildExit, write=FOnChildExit};
};
//---------------------------------------------------------------------------
class TConRedirect : public TComponent
{
private:
    bool isWinNT, childrunning, temp;
    HANDLE StdIn, StdOut, StdErr, StdInWrite, StdOutRead, StdErrRead;
    HANDLE StdInWriteTmp, StdOutReadTmp, StdErrReadTmp;
    HANDLE ChildProcess;

    TStdOutThread *StdOutThread;
    TStdErrThread *StdErrThread;
    TMonThread *MonThread;

    TStdReadEvent FOnStdOut;
    TStdReadEvent FOnStdErr;
    TChildExitEvent FOnChildExit;

    void __fastcall ClosePipeHandles (void);
    void __fastcall StdOutFunc (char *buffer, int len);
    void __fastcall StdErrFunc (char *buffer, int len);
    void __fastcall ChildExitFunc (int exitcode);

public:
    __fastcall TConRedirect(TComponent* Owner);
    __fastcall ~TConRedirect ();
    bool __fastcall RunChild (char *appname, char *params, char *workpath);
    void __fastcall Terminate (void);
    void __fastcall SendChar (char ch);
    void __fastcall SendString (AnsiString str);
    bool __fastcall isChildRunning (void);

__published:
    __property TStdReadEvent OnStdOut = {read=FOnStdOut, write=FOnStdOut};
    __property TStdReadEvent OnStdErr = {read=FOnStdErr, write=FOnStdErr};
    __property TChildExitEvent OnChildExit = {read=FOnChildExit, write=FOnChildExit};
};
//---------------------------------------------------------------------------

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -