線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2240
推到 Plurk!
推到 Facebook!

在DOS下執行地程式,將結果丟到Memo顯示

尚未結案
borispong
一般會員


發表:2
回覆:4
積分:0
註冊:2005-10-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-12-18 20:12:29 IP:140.127.xxx.xxx 未訂閱
void __fastcall TForm1::nfsClick(TObject *Sender)
{
SECURITY_DESCRIPTOR sd;
SECURITY_ATTRIBUTES sa;
STARTUPINFO si;
LPSECURITY_ATTRIBUTES lpsa = NULL;
OSVERSIONINFO osv;
osv.dwOSVersionInfoSize = sizeof(osv);
GetVersionEx(&osv);
HANDLE hReadPipe, hWritePipe;
PROCESS_INFORMATION pi;
char aText[10000];
DWORD dwSizeLow,ByteRead;

AnsiString parm;
PChar lpa;
AnsiString str1 = " -v "; //執行檔參數1。
AnsiString str2 = " -n "; //執行檔參數2。
AnsiString str3 = Edit1->Text; //輸入值
AnsiString data = str1 str2 str3; //將參數與輸入值合併成data。

start=clock(); //時間開始
if (osv.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, true, NULL, false);
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = true;
sa.lpSecurityDescriptor = &sd;
lpsa = &sa;
}

if (CreatePipe(&hReadPipe, &hWritePipe, lpsa, 0)==0)
{
ShowMessage("Create Pipe-Line error!");
CloseHandle(hReadPipe);
CloseHandle(hWritePipe);
return;
}

ZeroMemory(&si, sizeof(si));
si.cb=sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW |STARTF_USESTDHANDLES;
si.wShowWindow = SW_HIDE;
si.hStdOutput = hWritePipe;
si.hStdError = hWritePipe;

parm = "123.exe " data; //程式執行,且加入參數值


if (!CreateProcess(0,&parm[1],
0,//security
0,// security
true,//inherits handles
CREATE_NEW_CONSOLE,
0, 0, &si, &pi))
{ return;}
WaitForSingleObject(pi.hProcess,INFINITE);
dwSizeLow=GetFileSize(hReadPipe, NULL);
if (dwSizeLow>0)
{
ReadFile(hReadPipe, aText, dwSizeLow, &ByteRead, NULL);

Memo1->Lines->Append("Number is :" Edit1->Text);

Memo1->Lines->Append(String(aText));

end=clock();
total_time=(end-start)/CLK_TCK;
Memo1->Lines->Add("計算時間為:" FloatToStr(total_time) " 秒");

}
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(hReadPipe);
CloseHandle(hWritePipe);

}


請問各位先進前輩們:

以上是我的程式碼,該DOS下的程式123.exe,在執行時必須要加入參數,且希望最後將結果丟到Memo上面顯示。

但是該程式123.exe於執行時必須要跑非常久的時間約2個小時,
且大約跑個三十分鐘就結束了,最後結果都無法顯示出來,不知為何耶?

煩請前輩們指點一下嘍!
w45
一般會員


發表:25
回覆:29
積分:15
註冊:2006-07-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-01-19 07:43:32 IP:222.135.xxx.xxx 訂閱
你好,看看這兩篇文章是否適用:
http://www.3322ee.com/viewthread.php?tid=3035&page=1&extra=#pid3047
http://www.3322ee.com/viewthread.php?tid=2216&highlight=管道
系統時間:2017-12-16 20:40:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!