Ada_Ru форум

Обсуждение языка Ада

terminate or exit

Оставить новое сообщение

Сообщения

Aleksey Ulasevich
terminate or exit
2005-08-08 10:13:36

 

 

 

 

п■п╬п╠я─я▀п╧!

 

п▓ п╨п╫п╦пЁп╣ "п░п╢я│п╨п╬п╣ п©я─п╬пЁя─п╟п╪п╪п╦я─п╬п╡п╟п╫п╦п╣" п╡ я─п╟п╥п╢п╣п╩п╣б═ "15.2.5 п║п╣п╩п╣п╨я├п╦я▐ п©я─п╦п╫я▐я┌п╦я▐

я─п╟п╫п╢п╣п╡я┐". п∙я│я┌я▄ п©я─п╦п╪п╣я─:

 

task Server_Task is

entry Service_1 [ п©п╟я─п╟п╪п╣я┌я─я▀ п╢п╩я▐ Service_1 ] ;

. . .

entry Service_N [ п©п╟я─п╟п╪п╣я┌я─я▀ п╢п╩я▐ Service_N ] ;

end task;

 

task body Server_Task is

. . .

begin

loop

select

accept Service_1 [ п©п╟я─п╟п╪п╣я┌я─я▀ п╢п╩я▐ Service_1 ] do . . .

end Service_1;

or

. . .

or

accept Service_N [ п©п╟я─п╟п╪п╣я┌я─я▀ п╢п╩я▐ Service_N ] do . . .

end Service_N;

or

terminate; -- п╥п╟п╡п╣я─я┬п╣п╫п╦п╣ я─п╟п╠п╬я┌я▀ п╥п╟п╢п╟я┤п╦ end select

end loop;

end Server_Task;

 

п▓п╬п©я─п╬я│: п╦я│п©п╬п╩я▄п╥п╬п╡п╟п╫п╦п╣ exit п╡п╪п╣я│я┌п╬ terminate п╫п╣ п╠п╬п╩п╣п╣ п©я─п╟п╡п╦п╩я▄п╫п╬?

--

п║ я┐п╡п╟п╤п╣п╫п╦п╣п╪,

п░п╩п╣п╨я│п╣п╧ п╝. пёп╩п╟я│п╣п╡п╦я┤

(A.STAKANOV)

http://www.livejournal.com/users/a_stakanov/

Aleksey Ulasevich wrote:

Добрый!

 

В книге "Адское программирование" в разделе "15.2.5 Селекция принятия рандеву". Есть пример:

 

>*task* Server_Task *is*

*entry* Service_1 /[ параметры для Service_1 ]/ ;

. . .

*entry* Service_N /[ параметры для Service_N ]/ ;

>*end task*;

 

>*task body* Server_Task *is*

. . .

>*begin*

*loop*

*select*

*accept* Service_1 /[ параметры для Service_1 ]/ *do*

. . .

*end* Service_1;

*or*

. . .

*or*

*accept* Service_N /[ параметры для Service_N ]/ *do*

. . .

*end* Service_N;

*or*

*terminate*; -- завершение работы задачи

*end select*

*end loop*;

>*end* Server_Task;

 

Вопрос: использование *exit *вместо *terminate *не более правильно?

Немного разные понятия.

 

terminate разрешает остановить задачу и свернуть работу всей программы в целом после завершения выполнения environment task.

 

exit здесь просто завершит выполнение задачи.

 

Разница в том, что нормальный процесс сворачивания работы программы в случае с exit никогда не закончится успехом.

 

 

--

Vadim Godunko

 

 

 

 

Vadim Godunko п©п╦я┬п╣я┌:

 

Aleksey Ulasevich wrote:

п■п╬п╠я─я▀п╧!

 

п▓ п╨п╫п╦пЁп╣ "п░п╢я│п╨п╬п╣ п©я─п╬пЁя─п╟п╪п╪п╦я─п╬п╡п╟п╫п╦п╣" п╡ я─п╟п╥п╢п╣п╩п╣ "15.2.5 п║п╣п╩п╣п╨я├п╦я▐ п©я─п╦п╫я▐я┌п╦я▐

я─п╟п╫п╢п╣п╡я┐". п∙я│я┌я▄ п©я─п╦п╪п╣я─:

 

*task* Server_Task *is*

*entry* Service_1 /[ п©п╟я─п╟п╪п╣я┌я─я▀ п╢п╩я▐ Service_1 ]/ ;

. . .

*entry* Service_N /[ п©п╟я─п╟п╪п╣я┌я─я▀ п╢п╩я▐ Service_N ]/ ;

*end task*;

 

*task body* Server_Task *is*

. . .

*begin*

*loop*

*select*

*accept* Service_1 /[ п©п╟я─п╟п╪п╣я┌я─я▀ п╢п╩я▐ Service_1 ]/ *do* . . .

*end* Service_1;

*or*

. . .

*or*

*accept* Service_N /[ п©п╟я─п╟п╪п╣я┌я─я▀ п╢п╩я▐ Service_N ]/ *do* . . .

*end* Service_N;

*or*

*terminate*; -- п╥п╟п╡п╣я─я┬п╣п╫п╦п╣ я─п╟п╠п╬я┌я▀ п╥п╟п╢п╟я┤п╦ *end select*

*end loop*;

*end* Server_Task;

 

п▓п╬п©я─п╬я│: п╦я│п©п╬п╩я▄п╥п╬п╡п╟п╫п╦п╣ *exit *п╡п╪п╣я│я┌п╬ *terminate *п╫п╣ п╠п╬п╩п╣п╣ п©я─п╟п╡п╦п╩я▄п╫п╬?

 

п²п╣п╪п╫п╬пЁп╬ я─п╟п╥п╫я▀п╣ п©п╬п╫я▐я┌п╦я▐.

 

terminate я─п╟п╥я─п╣я┬п╟п╣я┌ п╬я│я┌п╟п╫п╬п╡п╦я┌я▄ п╥п╟п╢п╟я┤я┐ п╦ я│п╡п╣я─п╫я┐я┌я▄ я─п╟п╠п╬я┌я┐ п╡я│п╣п╧ п©я─п╬пЁя─п╟п╪п╪я▀ п╡

я├п╣п╩п╬п╪ п©п╬я│п╩п╣ п╥п╟п╡п╣я─я┬п╣п╫п╦я▐ п╡я▀п©п╬п╩п╫п╣п╫п╦я▐ environment task.

 

exit п╥п╢п╣я│я▄ п©я─п╬я│я┌п╬ п╥п╟п╡п╣я─я┬п╦я┌ п╡я▀п©п╬п╩п╫п╣п╫п╦п╣ п╥п╟п╢п╟я┤п╦.

 

п═п╟п╥п╫п╦я├п╟ п╡ я┌п╬п╪, я┤я┌п╬ п╫п╬я─п╪п╟п╩я▄п╫я▀п╧ п©я─п╬я├п╣я│я│ я│п╡п╬я─п╟я┤п╦п╡п╟п╫п╦я▐ я─п╟п╠п╬я┌я▀ п©я─п╬пЁя─п╟п╪п╪я▀ п╡

я│п╩я┐я┤п╟п╣ я│ exit п╫п╦п╨п╬пЁп╢п╟ п╫п╣ п╥п╟п╨п╬п╫я┤п╦я┌я│я▐ я┐я│п©п╣я┘п╬п╪.

 

"enviroment task" - я█я┌п╬ п╨п╟п╨ я▐ п©п╬п╫я▐п╩ п╬я│п╫п╬п╡п╫п╟я▐ п©я─п╬пЁя─п╟п╪п╪п╟ п╡ п╨п╬я┌я─п╬п╧

п╥п╟п©я┐я┴п╣п╫п╟ п╥п╟п╢п╟я┤п╟ Server_Task

п п╟п╨п╟я▐ я─п╟п╥п╫п╦я├п╟ п╪п╣п╤п╢я┐ п╬я│я┌п╟п╫п╬п╡п╨п╬п╧ п╥п╟п╢п╟я┤п╦ п╦ п╥п╟п╡п╣я─я┬п╣п╫п╦п╣п╪ ? п╞ п╪п╬пЁя┐ п©п╬я│п╩п╣

п╬я│я┌п╟п╫п╬п╡п╨п╦ я│п╫п╬п╡п╟ п╥п╟п©я┐я│я┌п╦я┌я▄ п╣п╣?

п╞ п╬п©я▐я┌я▄ пЁп╢п╣-я┌п╬ п╫п╣ п╢п╬я┤п╦я┌п╟п╩? )

 

--

п║ я┐п╡п╟п╤п╣п╫п╦п╣п╪,

п░п╩п╣п╨я│п╣п╧ п╝. пёп╩п╟я│п╣п╡п╦я┤

(A.STAKANOV)

http://www.livejournal.com/users/a_stakanov/

Aleksey Ulasevich wrote:

 

"enviroment task" - это как я понял основная программа в котрой запущена задача Server_Task

Какая разница между остановкой задачи и завершением ? Я могу после остановки снова запустить ее?

Я опять где-то не дочитал? )

 

environment task - задача, в которой запускается основная подпрограмма. Так вот, если основная подпрограмма завершается, то автоматически завершаются все задачи, "висящие" на альтернативе terminate. Если после этого нет более задач вообще, то происходит завершение работы программы.

 

PS.

 

task Environment_Task;

 

task body Environment_Task is

begin

Main;

 

loop

exit when No_More_Tasks;

Shutdown_Tasks_On_Terminate_Alternative;

end loop;

 

Exit_Process;

end Environment_Task;

 

-- Vadim Godunko

 

Technoserv A/S

Rostov-on-Don, Russia

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти