Текущий архив: 2004.10.10;
Скачать: CL | DM;
Вниз
Как завершить процес??? Найти похожие ветки
← →
XM-AD (2004-09-23 15:07) [0]Господа! Такой вопрос!
Создаю процесс, который выполняет следущее действо:
procedure MyThread.Execute;
begin
while not Terminated do
begin
//операции
sleep(50);
end;
end;
только есть проблема - при закрытии программы возникает ошибка raiseв expression бла-бла-бла на этом самом sleep
Как сделать чтобы прога нормально закрывалась????
← →
Digitman © (2004-09-23 15:21) [1]
> возникает ошибка raiseв expression бла-бла-бла на этом самом
> sleep
sleep() не может возбудить исключение, не выдумывай
и что еще за "бла-бла-бла" ? что , буквы незнакомые в сообщении об ошибке ? ты даже не в состоянии скопировать сюда точный текст сообщение об исключении, если с переводом этого текста у тебя проблемы ?
← →
DVM © (2004-09-23 15:29) [2]
> Создаю процесс, который выполняет следущее действо:
только это не процесс, а поток.
← →
Linco (2004-09-23 15:33) [3]Исключение вызывает не sleep а, вероятно, поток, некорректно уничтожается, попробуйте при создании потока, либо в Onterminate:
FreeOnTerminate := True;
← →
XM-AD (2004-09-23 15:53) [4]Полный текст сообщения об ошибке: (хотя я не думаю, что это что-то разъяснит)
Project vip_day.exe raised exception class EAccessViolation with message "Access violation at address 00C520C7. Write of address 018A40B8". Project stopped. Use Step or Run to continue.
Компилятор останавливает курсор выполнения как раз на sleep(50);
Причем иногда приложение закрывается нормально, я так подозреваю в те моменты когда выполняется то, что перед sleep, а там MainForm.canvas.draw
когда sleep закоментирована все закрывается нормально... только перерисовка очень быстро идет :):):)
FreeOnTerminate := True; вызывается при MyThread.create
← →
XM-AD (2004-09-23 15:53) [5]Полный текст сообщения об ошибке: (хотя я не думаю, что это что-то разъяснит)
Project vip_day.exe raised exception class EAccessViolation with message "Access violation at address 00C520C7. Write of address 018A40B8". Project stopped. Use Step or Run to continue.
Компилятор останавливает курсор выполнения как раз на sleep(50);
Причем иногда приложение закрывается нормально, я так подозреваю в те моменты когда выполняется то, что перед sleep, а там MainForm.canvas.draw
когда sleep закоментирована все закрывается нормально... только перерисовка очень быстро идет :):):)
FreeOnTerminate := True; вызывается при MyThread.create
← →
Sandman25 © (2004-09-23 15:55) [6]MainForm.canvas.draw
Про Synchronize знаете?
← →
Erik1 © (2004-09-23 16:02) [7]Вобщето вместо Sleep удобнее использовать WaitForMultipleObjects Привер:
Status := WaitForMultipleObjects(Ord(High(tmEvent.Event)) + 1,@tmEvent.Event, false, fTimeOut); //INFINITE
case Status of
Ord(Low(TActiveEvent))..Ord(High(TActiveEvent)):
begin
tmEvent.Call[TActiveEvent(Status)](Self);
if (TActiveEvent(Status) <> actExit) then
Synchronize(DoFinished);
end;
Описано tmEvent так:
TActiveEvent = (actExit, actSend);
RAction = record
Event: array[TActiveEvent] of THandle;
Call: array[TActiveEvent] of TNotifyEvent;
end;
Бери я сегодня добрый.
← →
Linco (2004-09-23 16:03) [8]Если нужно что-то нарисовать из потока используйте
canvas.lock;
canvas.draw;
canvas.unlock;
Попробуйте, может причина в этом.
← →
Sandman25 © (2004-09-23 16:03) [9][7] Erik1 © (23.09.04 16:02)
"удобнее" не совсем подходящее слово, ИМХО :)
← →
Erik1 © (2004-09-23 16:13) [10]To Sandman25
Почему, раньше я использовал Sleep после освоения Wait функций перестал им пользоватся. Например в случие теримнирования потока приходится ожидать пока этот Sleep выполнится, а так выходим сразу как только возможно. У меня вобще свой базовай класс написан для потоков.
← →
Digitman © (2004-09-23 16:14) [11]
> XM-AD (23.09.04 15:53) [5]
сначала нужно терминировать поток (и дождаться его фактического завершения !!!), а уж только потом терминировать процесс приложения
иначе как раз и получается такая глупая ситуация)
← →
Sandman25 © (2004-09-23 16:23) [12][10] Erik1 © (23.09.04 16:13)
Что удобнее - написать sleep(N) или подключать модуль, вспоминать название и параметры функции?
← →
Erik1 © (2004-09-23 16:43) [13]To Sandman25
Просто так поток непаявляется, значить стоит более мение серезная задача и надо незабыть синхноризацию, методы окончания потока, совмествый доступ к переменым, вобщем работы хватает. Я мне надо подключить модуль и унаследоватся от своего класса, он у меня кучу работы делает. А Copy+Paste это плохой стиль програмирования.
← →
Sandman25 © (2004-09-23 16:46) [14][13] Erik1 © (23.09.04 16:43)
Наконец-то. sleep удобнее, а своя функция правильнее.
Страницы: 1 вся ветка
Текущий архив: 2004.10.10;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.023 c