2015-01-11 3 views
-3

Я пытаюсь выполнить некоторые команды cmd dos в проекте Delphi с помощью функции выполнения cmd, которая работает хорошо, но когда выполнение в процессе, приложение похоже на замораживание и блокируется до процесс завершен. Мне нужна помощь, есть ли какие-либо трюки, чтобы обойти этот процесс, чтобы приложение работало нормально, когда выполняется процесс.Выполнение cmd в delphi без замораживания

Обновление от комментариев:

функции, я использую создает трубу:

if CreatePipe(read_stdout, newstdout, @sa, 0) then begin 
    GetStartupInfo(si); 
    with si do begin 
    dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW; 
    wShowWindow := SW_HIDE; 
    hStdOutput := newstdout; 
    hStdError := newstdout; 
    hStdInput := newstdin; 
    end; 

После Google я нашел функцию здесь http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_25050763.html

Подход 1: (Автор: Marco Pipino) ......

Может ли кто-нибудь помочь мне изменить эту функцию, чтобы enduse Не думайте, что приложение висит во время выполнения команды?

+0

Пожалуйста, добавляйте код/​​исключение, иначе люди не смогут вам помочь. – Shai

+1

[Общение с командной строкой через Delphi] (http://stackoverflow.com/questions/10598313/communicate-with-command-prompt-through-delphi) и [Получить неблокирующий вывод CommandLine] (http: // stackoverflow. com/questions/26443037/get-non-blocking-commandline-output) – bummi

ответ

-2

В быстрых решений, я бы START партию, то есть это сигнал завершения путем создания или удаления файла, например:

@echo off 
setlocal 
echo.>"c:\some\filename" 
start "title if you want one" yourrealbatch anditsparameters 

yourrealbatch затем следует удалить "c:\some\filename" после его обработки готовой

Затем дельфи просто контролирует наличие "c:\some\filename". Когда он исчезает, пакетный процесс завершен.

+0

Я не использую пакет в Delphi .. Я использую функцию для захвата вывода dos в Memo с функцией function GetDosOutput (CommandLine: string; Work: string = 'C: \'): string; моя проблема в том, что когда команда находится в процессе, приложение Delphi остается невосприимчивым или вроде замораживает до завершения выполнения команды. Я смотрю чередуюся, чтобы при выполнении процесса выполнения приложения [Форма] не замерзала. должен быть подвижным не как unresponsive ... – stiphen

+0

функция, которую я использую, создает pipe, если CreatePipe (read_stdout, newstdout, @sa, 0), затем begin GetStartupInfo (si); с si do начало dwFlags: = STARTF_USESTDHANDLES или STARTF_USESHOWWINDOW; wShowWindow: = SW_HIDE; hStdOutput: = newstdout; hStdError: = newstdout; hStdInput: = newstdin; конец; – stiphen

+0

После Google я нашел функцию здесь http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_25050763.html .... Подход 1: (Автор: Марко Пипино) ......может ли кто-нибудь помочь мне изменить эту функцию, чтобы конечный пользователь не думал, что приложение висит во время выполнения команды. – stiphen

0

Ваша проблема в том, что вы блокируете основной поток. Основной поток приложения должен своевременно обрабатывать сообщения, чтобы оставаться отзывчивыми.

Правильный способ справиться с этим - начать внешний процесс, а затем дождаться его, из потока. Это гарантирует, что вы не заблокируете основной поток. Возможно, вы захотите использовать некоторую связь между потоками, чтобы обеспечить обратную связь с пользователем.

+0

будет оценен любой пример с рабочим кодом. – stiphen

+0

Будет лучше для вас приложить усилия, чтобы узнать об этом, вместо того, чтобы кто-то написал все это для вас. Помните также, что вы не указали код и не указали версию Delphi. В XE7 вы можете использовать новую параллельную библиотеку высокого уровня. –

+0

Я использую D7, и функция, которую я использую для захвата вывода, - это [function ExecuteCommand (CommandLine: string): string;], которую я нашел из http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_25050763 .html, но когда команды выполняются .. приложение остается как зависание до тех пор, пока команды не закончится .. как я могу избавиться от этого – stiphen

Смежные вопросы