記憶體溢出 |
答題得分者是:ikk
|
hank73317
一般會員 發表:20 回覆:47 積分:13 註冊:2008-12-12 發送簡訊給我 |
|
hdilwy
初階會員 發表:18 回覆:65 積分:41 註冊:2004-08-31 發送簡訊給我 |
|
hank73317
一般會員 發表:20 回覆:47 積分:13 註冊:2008-12-12 發送簡訊給我 |
我好像找到問題所在了!
就是我使用 String s= "C:\\Program Files\\Microsoft Office\\Office10\\WINWORD.EXE"; DWORD rt; STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb=sizeof(si); ZeroMemory(&pi, sizeof(pi)); if(!CreateProcess(NULL,s.c_str(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { ShowMessage("CreateProcess failed!" IntToStr(GetLastError())); } do { //修改成do while迴圈來等待 rt = WaitForSingleObject(pi.hProcess, 0); //這裡不等待 Application->ProcessMessages(); Sleep(100); } while( rt == WAIT_TIMEOUT); //是否timeout? CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); ShowMessage("WinWord terminate!"); 這個方法來開檔,就是它會等程式結束後才繼續執行下去,布過我會一直去RUN這段程式,所以可能會變成卡住了,所以當我把開檔改成Winexec後,就沒有這個問題, 布過這樣又無法判斷程式是否執行完畢,請問大大還有別的方法嗎?? |
hank73317
一般會員 發表:20 回覆:47 積分:13 註冊:2008-12-12 發送簡訊給我 |
|
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
hank73317
一般會員 發表:20 回覆:47 積分:13 註冊:2008-12-12 發送簡訊給我 |
|
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
[code cpp] BOOL GetProcessList( ) { HANDLE hProcessSnap; HANDLE hProcess; PROCESSENTRY32 pe32; DWORD dwPriorityClass; // Take a snapshot of all processes in the system. hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); if( hProcessSnap == INVALID_HANDLE_VALUE ) { printError( TEXT("CreateToolhelp32Snapshot (of processes)") ); return( FALSE ); } // Set the size of the structure before using it. pe32.dwSize = sizeof( PROCESSENTRY32 ); // Retrieve information about the first process, // and exit if unsuccessful if( !Process32First( hProcessSnap, &pe32 ) ) { printError( TEXT("Process32First") ); // show cause of failure CloseHandle( hProcessSnap ); // clean the snapshot object return( FALSE ); } // Now walk the snapshot of processes, and // display information about each process in turn do { printf( "\n\n=====================================================" ); _tprintf( TEXT("\nPROCESS NAME: %s"), pe32.szExeFile ); printf( "\n-----------------------------------------------------" ); } while( Process32Next( hProcessSnap, &pe32 ) ); CloseHandle( hProcessSnap ); return( TRUE ); } [/code]
------
FPGA驗證, FPGA開發平台, http://smims.com |
hank73317
一般會員 發表:20 回覆:47 積分:13 註冊:2008-12-12 發送簡訊給我 |
|
hank73317
一般會員 發表:20 回覆:47 積分:13 註冊:2008-12-12 發送簡訊給我 |
還是請問,使用以下來開檔,只要在程式中使用次數一多,就會顯示錯誤訊息!(Project Project1.exe raised exception class EStackOverflow with message 'Stack overflow') 有辦法改變嗎?? 勞煩各位大大了~~~ String Button2="C:\\WTESTELL\\" Str[0].Trim(); if(!CreateProcess(NULL,Button2.c_str(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { BitBtn2->Font->Style=TFontStyles(); BitBtn2->Font->Color=clRed; BitBtn2->Caption="NULL"; } do { //修改成do while迴圈來等待 rt = WaitForSingleObject(pi.hProcess, 0); //這裡不等待 Application->ProcessMessages(); Sleep(100); } while( rt == WAIT_TIMEOUT); //是否timeout? CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); |
hank73317
一般會員 發表:20 回覆:47 積分:13 註冊:2008-12-12 發送簡訊給我 |
從前輩們的程式中我找到了一篇比較符合我的功能
[code cpp] bool __fastcall TForm1::KillTask(String ExeFileName) { bool ContinueLoop; HANDLE FSnapshotHandle; PROCESSENTRY32 FProcessEntry32; int result= 0; FSnapshotHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); FProcessEntry32.dwSize = sizeof(FProcessEntry32); ContinueLoop = Process32First(FSnapshotHandle,&FProcessEntry32); while(ContinueLoop !=0) { if((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) == UpperCase(ExeFileName))||(UpperCase(FProcessEntry32.szExeFile) == UpperCase(ExeFileName))) result = (int)TerminateProcess(OpenProcess(PROCESS_TERMINATE, false, FProcessEntry32.th32ProcessID), 0); ContinueLoop = Process32Next(FSnapshotHandle, &FProcessEntry32); } CloseHandle(FSnapshotHandle); return result; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { bool fg= KillTask(Edit1->Text); if(fg) ShowMessage("指定的檔案已關閉..."); else ShowMessage("找不到指定的檔案?"); } [/code] 布過執行完畢後找到的執行檔會自動關閉,如果我不想把它自動關閉,請問大大們,我要如何修改呢?
編輯記錄
hank73317 重新編輯於 2009-02-10 15:45:09, 註解 無‧
|
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
hank73317
一般會員 發表:20 回覆:47 積分:13 註冊:2008-12-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |