Параллельные процессы, Релизация параллельных процессов |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
Параллельные процессы, Релизация параллельных процессов |
serge2k |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 10 Репутация: 0 |
Народ, может подскажите как в паскале реализовать параллельные процессы... Например, надо чтобы 2 процедуры выполнялись одновременно, независимо друг от друга. Если так можно сделать толко через защищенный режим работы процессора, то опишите пожалуйста метод поподробнее...
|
Altair |
Сообщение
#2
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Нет, можно и через реальный режим. На самом деле многозачности в паскале сделать невозможно! Когда называют многозадачность в Паскале, имеют ввиду псевдомногозадачность. Также, как не может компьютер получать случайные числа (только псевдослучайные).
А посмотреть хорошие примеры псевдомультизадачности, можно здесь: http://pascal.sources.ru/multtask/index.htm --------------- P.S. на вопрос я не ответил, просто ссылку кинул. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
BlackShadow |
Сообщение
#3
|
Гость |
Самый простой способ реализации псевдомультизадачности приблизительно таков: создаётся n функций вида Function Fi:Boolean. Затем создаётся процедура типа Procedure Work, которая вызывает все функции из списка по-очереди, смотрит не вернула ли очередная функция False и, если так, то удаляет её из этого списка. Сами же функции при вызове отрабатывают какой-то свой кусочек и возвращают True, если они ещё не закончили, или False в противном случае. При повторном вызове функция просто возобнавляет процесс. Вот простой пример:
Код Var nf:Integer; fRes:Integer; Function Factorial:Boolean; Begin If nf=1 Then Factorial:=False Else Begin fRes:=fRes*nf; Dec(nf); Factorial:=True End End; Var dn:Integer; dx:Integer; dRes:Integer; Function Degree:Boolean; Begin If dn=1 Then Degree:=False Else Begin dRes:=dRes*dx; Dec(dn); Degree:=True End End; Type TCallBack=Function:Boolean; TCallBackData=Record Fn:TCallBack; NeedToCall:Boolean End; Const CallBacks:Array[1..2] Of TCallBackData = ((Factorial,True),(Degree,True)); Procedure Work; Var Cont:Boolean; i:Integer; Begin Cont:=True; While Cont Do Begin Cont:=False; For i:=1 To 2 Do If CallBacks[i].NeedToCall Then Begin Cont:=True; CallBacks[i].NeedToCall:=CallBacks[i].Fn End End End; Begin ReadLn(nf); ReadLn(x); ReadLn(dn); fRes:=1; dRes:=1; Work; WriterLn(fRes); WriteLn(dRes) End. Учти, что пример действительно просто демонстративный. Всё это можно оптимизировать и ещё как. |
where can i buy furosemide in th |
Сообщение
#4
|
Гость |
non generic cialis
|
Текстовая версия | 6.05.2024 9:55 |