![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() ![]() |
![]() |
serge2k |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 10 Репутация: ![]() ![]() ![]() |
Народ, может подскажите как в паскале реализовать параллельные процессы... Например, надо чтобы 2 процедуры выполнялись одновременно, независимо друг от друга. Если так можно сделать толко через защищенный режим работы процессора, то опишите пожалуйста метод поподробнее...
|
Altair |
![]()
Сообщение
#2
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Нет, можно и через реальный режим. На самом деле многозачности в паскале сделать невозможно! Когда называют многозадачность в Паскале, имеют ввиду псевдомногозадачность. Также, как не может компьютер получать случайные числа (только псевдослучайные).
А посмотреть хорошие примеры псевдомультизадачности, можно здесь: 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.04.2025 0:30 |