亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? process.cpp

?? 一個(gè)功能強(qiáng)大的代碼編輯器源代碼
?? CPP
字號(hào):
//this file is part of notepad++
//Copyright (C)2003 Don HO ( donho@altern.org )
//
//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.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU General Public License for more details.
//
//You should have received a copy of the GNU General Public License
//along with this program; if not, write to the Free Software
//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

#include "process.h"
#include "SysMsg.h"

BOOL Process::run()
{
	BOOL result = TRUE;

	// stdout & stderr pipes for process to write
	HANDLE hPipeOutW = NULL;
	HANDLE hPipeErrW = NULL;

	HANDLE hListenerStdOutThread = NULL;
	HANDLE hListenerStdErrThread = NULL;

	HANDLE hWaitForProcessEndThread = NULL;

	HANDLE hListenerEvent[2];
	hListenerEvent[0] = NULL;
	hListenerEvent[1] = NULL;

	SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; // inheritable handle

	try {
		// Create stdout pipe
		if (!::CreatePipe(&_hPipeOutR, &hPipeOutW, &sa, 0))
			error("CreatePipe", result, 1000);
		
		// Create stderr pipe
		if (!::CreatePipe(&_hPipeErrR, &hPipeErrW, &sa, 0))
			error("CreatePipe", result, 1001);

		STARTUPINFO startup;
		PROCESS_INFORMATION procinfo;
		::ZeroMemory(&startup, sizeof(startup));
		startup.cb = sizeof(startup);
		startup.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
        startup.wShowWindow = (_type == WIN32_PROG)?SW_SHOW:SW_HIDE; // hidden console window
		startup.hStdInput = NULL; // not used
		startup.hStdOutput = hPipeOutW;
		startup.hStdError = hPipeErrW;

		string cmd = "\"";
		cmd += _command;
		cmd += "\"";

		if (_args[0])
		{
			cmd += " ";
			cmd += _args;
		}
        BOOL started = ::CreateProcess(NULL,        // command is part of input string
			(LPSTR)cmd.c_str(),         // (writeable) command string
						NULL,        // process security
						NULL,        // thread security
						TRUE,        // inherit handles flag
						(_type == WIN32_PROG)?NULL:CREATE_SUSPENDED,           // flags
						NULL,        // inherit environment
						_curDir,        // inherit directory
						&startup,    // STARTUPINFO
						&procinfo);  // PROCESS_INFORMATION
		
		_hProcess = procinfo.hProcess;
		_hProcessThread = procinfo.hThread;

		if(!started)
			error("CreateProcess", result, 1002);

        if (_type == CONSOLE_PROG)
        {
		    hListenerEvent[0] = ::CreateEvent(NULL, FALSE, FALSE, "listenerEvent");
		    if(!hListenerEvent[0])
			    error("CreateEvent", result, 1003);

		    hListenerEvent[1] = ::CreateEvent(NULL, FALSE, FALSE, "listenerStdErrEvent");
		    if(!hListenerEvent[1])
			    error("CreateEvent", result, 1004);

        
		    // The process is running so we set this to FALSE
		    _bProcessEnd = FALSE;

		    hWaitForProcessEndThread = ::CreateThread(NULL, 0, staticWaitForProcessEnd, this, 0, NULL);
		    if (!hWaitForProcessEndThread)
			    error("CreateThread", result, 1005);

		    hListenerStdOutThread = ::CreateThread(NULL, 0, staticListenerStdOut, this, 0, NULL);
		    if (!hListenerStdOutThread)
			    error("CreateThread", result, 1006);
    		
		    hListenerStdErrThread = ::CreateThread(NULL, 0, staticListenerStdErr, this, 0, NULL);
		    if (!hListenerStdErrThread)
			    error("CreateThread", result, 1007);

		    // We wait until the process is over
		    // TO DO: This should be a bit secured in case something happen and the
		    // _bProcessEnd variable never gets set to TRUE... (by checking process
		    // state as well for instance to see if it is still running...)
		    while (!_bProcessEnd)
		    {
			    MSG msg;
			    while( ::PeekMessage( &msg, NULL, 0, 0, PM_REMOVE))
			    {
				    if( msg.message == WM_QUIT)
				    {
					    ::PostQuitMessage(0);
					    // We do not exit but simply break in order to close
					    // handles properly
					    _bProcessEnd = TRUE;
					    break;
				    }
				    else
				    {
					    ::TranslateMessage( &msg);
					    ::DispatchMessage( &msg);
				    }
			    }
		    }
        }
	} catch (int coderr){
		char str[10];
		::MessageBox(NULL, itoa(coderr, str, 10), "Exception :", MB_OK);
	}

	// on va fermer toutes les handles
	if (hPipeOutW)
		::CloseHandle(hPipeOutW);
	if (hPipeErrW)
		::CloseHandle(hPipeErrW);
	if (_hPipeOutR)
		::CloseHandle(_hPipeOutR);
	if (_hPipeErrR)
		::CloseHandle(_hPipeErrR);
	if (hListenerStdOutThread)
		::CloseHandle(hListenerStdOutThread);
	if (hListenerStdErrThread)
		::CloseHandle(hListenerStdErrThread);
	if (hWaitForProcessEndThread)
		::CloseHandle(hWaitForProcessEndThread);
	if (hListenerEvent[0])
		::CloseHandle(hListenerEvent[0]);
	if (hListenerEvent[1])
		::CloseHandle(hListenerEvent[1]);

	return result;
}


#define MAX_LINE_LENGTH 1024

void Process::listenerStdOut()
{
	//BOOL Result = 0;
	//DWORD size = 0;
	DWORD bytesAvail = 0;
	BOOL result = 0;
	HANDLE hListenerEvent = ::OpenEvent(EVENT_ALL_ACCESS, FALSE, "listenerEvent");
	//FILE *fp = NULL;

	int taille = 0;
	TCHAR bufferOut[MAX_LINE_LENGTH + 1];
	//TCHAR bufferErr[MAX_LINE_LENGTH + 1];

	int nExitCode = STILL_ACTIVE;
	
	DWORD outbytesRead;

	::ResumeThread(_hProcessThread);

	while (true)
	{ // got data
		memset(bufferOut,0x00,MAX_LINE_LENGTH + 1); 
		//memset(bufferErr,0x00,MAX_LINE_LENGTH + 1);
		taille = sizeof(bufferOut) - sizeof(TCHAR);
		
		Sleep(50);

		if (!::PeekNamedPipe(_hPipeOutR, bufferOut, taille, &outbytesRead, &bytesAvail, NULL)) 
		{
			bytesAvail = 0;
			break;
		}

		if(outbytesRead)
		{
			result = :: ReadFile(_hPipeOutR, bufferOut, taille, &outbytesRead, NULL);
			if ((!result) && (outbytesRead == 0))
				break;
		}
		//outbytesRead = strlen(bufferOut);
		bufferOut[outbytesRead] = '\0';
		string s;
		s.assign(bufferOut);
		_stdoutStr += s;

		if (::GetExitCodeProcess(_hProcess, (unsigned long*)&nExitCode))
		{
			if (nExitCode != STILL_ACTIVE)
				break; // EOF condition
		}
		//else
			//break;
	}
	_exitCode = nExitCode;

	if(!::SetEvent(hListenerEvent))
	{
		systemMessage("Thread listenerStdOut");
	}
}

void Process::listenerStdErr()
{
	//BOOL Result = 0;
	//DWORD size = 0;
	DWORD bytesAvail = 0;
	BOOL result = 0;
	HANDLE hListenerEvent = ::OpenEvent(EVENT_ALL_ACCESS, FALSE, "listenerStdErrEvent");

	int taille = 0;
	//TCHAR bufferOut[MAX_LINE_LENGTH + 1];
	TCHAR bufferErr[MAX_LINE_LENGTH + 1];

	int nExitCode = STILL_ACTIVE;
	
	DWORD errbytesRead;

	::ResumeThread(_hProcessThread);

	while (true)
	{ // got data
		memset(bufferErr, 0x00, MAX_LINE_LENGTH + 1);
		taille = sizeof(bufferErr) - sizeof(TCHAR);

		Sleep(50);

		if (!::PeekNamedPipe(_hPipeErrR, bufferErr, taille, &errbytesRead, &bytesAvail, NULL)) 
		{
			bytesAvail = 0;
			break;
		}

		if(errbytesRead)
		{
			result = :: ReadFile(_hPipeErrR, bufferErr, taille, &errbytesRead, NULL);
			if ((!result) && (errbytesRead == 0))
				break;
		}
		//outbytesRead = strlen(bufferOut);
		bufferErr[errbytesRead] = '\0';
		string s;
		s.assign(bufferErr);
		_stderrStr += s;

		if (::GetExitCodeProcess(_hProcess, (unsigned long*)&nExitCode))
		{
			if (nExitCode != STILL_ACTIVE)
				break; // EOF condition
		}
	}

	if(!::SetEvent(hListenerEvent))
	{
		systemMessage("Thread stdout listener");
	}
}

void Process::waitForProcessEnd()
{
	HANDLE hListenerEvent[2];
	hListenerEvent[0] = ::OpenEvent(EVENT_ALL_ACCESS, FALSE, "listenerEvent");
	hListenerEvent[1] = ::OpenEvent(EVENT_ALL_ACCESS, FALSE, "listenerStdErrEvent");

	::WaitForSingleObject(_hProcess, INFINITE);
	::WaitForMultipleObjects(2, hListenerEvent, TRUE, INFINITE);

	_bProcessEnd = TRUE;
}

void Process::error(const char *txt2display, BOOL & returnCode, int errCode)
{
	systemMessage(txt2display);
	returnCode = FALSE;
	throw int(errCode);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久这里只精品最新地址| 欧美本精品男人aⅴ天堂| 日韩不卡手机在线v区| 欧美激情在线看| 欧美欧美欧美欧美| 不卡av在线网| 蜜臀久久99精品久久久久宅男| 亚洲欧美偷拍三级| 欧美激情一区在线观看| 日韩女同互慰一区二区| 欧美亚洲综合一区| 成人不卡免费av| 九九**精品视频免费播放| 亚洲欧美激情小说另类| 欧美精品一区二区蜜臀亚洲| 欧美日韩国产123区| 色偷偷成人一区二区三区91| 国产不卡视频一区| 国产久卡久卡久卡久卡视频精品| 亚洲第一主播视频| 久久久久青草大香线综合精品| 不卡在线观看av| 麻豆国产一区二区| 亚洲成人一区在线| 亚洲视频免费在线| 精品日韩欧美在线| 欧美日本韩国一区二区三区视频| youjizz国产精品| 丁香一区二区三区| 国产美女在线观看一区| 美女被吸乳得到大胸91| 日韩高清在线不卡| 日韩高清不卡在线| 青椒成人免费视频| 美女一区二区久久| 免费成人在线播放| 久久精品国产一区二区| 麻豆专区一区二区三区四区五区| 日本美女视频一区二区| 日韩不卡在线观看日韩不卡视频| 石原莉奈在线亚洲二区| 男女男精品视频| 极品少妇xxxx偷拍精品少妇| 极品少妇xxxx精品少妇偷拍| 国产在线视视频有精品| 九色porny丨国产精品| 国产中文一区二区三区| 国产999精品久久久久久绿帽| 国产麻豆日韩欧美久久| 成人在线综合网站| 色哟哟一区二区三区| 在线免费av一区| 欧美日韩免费视频| 欧美一区二区三区四区久久 | 国产二区国产一区在线观看| 韩国一区二区在线观看| 国产黄色精品视频| 国产成人免费视频网站高清观看视频| 成人免费av资源| 国产69精品久久久久777| 成人性生交大片免费看在线播放| 国产一区二区精品久久91| 成人毛片在线观看| 欧美日韩免费不卡视频一区二区三区| 精品视频在线看| 欧美一区二区三级| 欧美不卡一区二区三区四区| 精品成人一区二区三区| 中文字幕免费不卡| 国产精品你懂的在线| 亚洲精选免费视频| 亚洲成年人影院| 日本亚洲一区二区| 精品一二三四区| caoporm超碰国产精品| 成人免费不卡视频| 色综合久久综合网欧美综合网| 色婷婷av一区| 日韩欧美中文一区| 91精品91久久久中77777| 欧美中文字幕一区二区三区亚洲 | 色综合咪咪久久| 欧美视频一区在线| 欧美精品一区二区久久久| 中文字幕高清一区| 亚洲激情男女视频| 久久精品久久99精品久久| 成人午夜激情视频| 日韩一二在线观看| 亚洲视频一区二区在线观看| 视频一区二区中文字幕| 成人免费看黄yyy456| 91精品国产欧美日韩| 亚洲国产成人在线| 麻豆成人免费电影| 91高清视频免费看| 欧美国产日韩一二三区| 日韩经典一区二区| 日本韩国一区二区| 久久久久国产精品免费免费搜索| 亚洲国产va精品久久久不卡综合| 大白屁股一区二区视频| 7777精品伊人久久久大香线蕉完整版 | 在线视频国产一区| 欧美激情一区二区三区全黄| 日本亚洲电影天堂| 在线一区二区三区四区| 亚洲国产精品精华液ab| 久久99久久久欧美国产| 7777精品久久久大香线蕉 | 日本一区二区免费在线观看视频| 日韩综合一区二区| 色偷偷成人一区二区三区91 | 日韩欧美你懂的| 亚洲国产精品一区二区尤物区| 成人av在线一区二区| 久久久久青草大香线综合精品| 欧美aaaaa成人免费观看视频| 欧美优质美女网站| 中文字幕一区在线观看视频| 国产不卡视频一区| 久久久99精品免费观看不卡| 久久国产夜色精品鲁鲁99| 51午夜精品国产| 视频一区欧美精品| 91麻豆精品国产91久久久更新时间 | 日本道色综合久久| 国产精品久久久久婷婷二区次| 国内精品免费在线观看| 日韩一级片在线观看| 日本不卡123| 日韩午夜激情免费电影| 日韩电影一区二区三区| 日韩亚洲欧美一区二区三区| 亚洲成精国产精品女| 欧美性xxxxxxxx| 亚洲高清免费一级二级三级| 欧美性一二三区| 亚洲成av人片在线| 欧美日本一道本在线视频| 亚洲成人动漫在线观看| 欧美卡1卡2卡| 蜜桃在线一区二区三区| 精品久久久久久最新网址| 精品在线播放午夜| 国产欧美一二三区| 成人黄色一级视频| 一区二区三区在线影院| 欧美日韩一区二区三区不卡| 丝瓜av网站精品一区二区| 日韩一本二本av| 国产成人综合精品三级| 亚洲欧洲成人精品av97| 欧美在线免费观看亚洲| 亚洲一区二区成人在线观看| 欧美日韩www| 免费观看91视频大全| 国产午夜亚洲精品午夜鲁丝片| 成人的网站免费观看| 亚洲无线码一区二区三区| 欧美一区二区在线不卡| 国产一区二区三区四区五区美女| 日本一区二区三区国色天香| 日本黄色一区二区| 久久精品国产久精国产爱| 国产亚洲精品aa午夜观看| 91在线视频在线| 日韩在线一二三区| 中文字幕不卡的av| 欧美日韩亚洲丝袜制服| 精品无人码麻豆乱码1区2区| 国产精品久久久久影院亚瑟| 欧美日韩亚洲综合在线 | 视频一区二区三区入口| 2024国产精品| 色诱视频网站一区| 激情文学综合丁香| 亚洲精选在线视频| 精品美女一区二区三区| 91捆绑美女网站| 九九在线精品视频| 樱桃视频在线观看一区| 日韩欧美国产综合在线一区二区三区| 丁香啪啪综合成人亚洲小说| 亚洲综合久久久久| 欧美国产欧美亚州国产日韩mv天天看完整 | 色综合久久66| 国产成人综合精品三级| 亚洲成人午夜电影| 中文字幕中文字幕中文字幕亚洲无线| 91精品国产综合久久香蕉麻豆| 99久久精品一区| 国产在线不卡一卡二卡三卡四卡| 一二三四社区欧美黄| 国产欧美精品一区| 欧美电影免费观看完整版| 欧美性淫爽ww久久久久无| 成人一二三区视频| 精品在线你懂的| 日韩精品一卡二卡三卡四卡无卡|