Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Fiber


Scorpion ©   (2004-10-30 15:56:00) 

Не ясен принцип работы функций CreateFiber,ConvertThreadToFiber.
При их вызове почему то указатель на файбер остается равен nill . Пожалуйста , помогите.


Scorpion   (2004-10-30 23:28:00) [1]

ВСЕ...:))) Получилось.Большое вам спасибо.:)))


Scorpion   (2004-10-30 23:17:00) [2]

Слегка помогло :

p:=nil;
p2:=nil;
p4 :=GetFiberData;
p5:=GetFiberData;
p:=ConvertThreadToFiber(p4);
p2:=CreateFiber(0,@f,p5);
SwitchToFiber(p2);

Но SwitchToFiber(p2); не переходит на функцию ,a завершает приложение.


Игорь Шевченко   (2004-10-30 22:51:00) [3]


> Функция(CreateFiber) возвращает longbool


Увы, глюк у Borland.

Ее прототип должен был объявлен, как
function CreateFiber(dwStackSize: DWORD; lpStartAddress: LPFIBER_START_ROUTINE;
 lpParameter: LPVOID): LPVOID; stdcall;


Scorpion   (2004-10-30 22:32:00) [4]

Почитал и Рихтера и описание...3 день читаю .
Ответов на мои вопросы там к сожалению нет: (((

Функция(CreateFiber) возвращает longbool , хотя в описание написано иное.Я предположил что 3 параметр переменный(p2).Так что проблема не решена:(((


Игорь Шевченко   (2004-10-30 22:26:00) [5]

Почитай описание фукнции CreateFiber. Почитай Рихтера.


Scorpion   (2004-10-30 21:35:00) [6]

Функция возвращает longbool , хотя в описание написано иное.Я предположил что 3 параметр переменный(p2).Так что проблема не решена:(((


Игорь Шевченко   (2004-10-30 18:24:00) [7]


> p,p2 остаются nil


Так ты написал в самом начале, что они равны nil - вот они и остались.


> (CreateFiber(0,@f,p2));  Создается файбер со стеком 1 мб
> и указателем на функцию f


Почитай описание функции, у нее есть возвращаемое значение. Которое обычно и передается в SwitchToFiber.


Scorpion   (2004-10-30 17:32:00) [8]

ConvertThreadToFiber(p); Поток ассоциируется с файбером    
(CreateFiber(0,@f,p2));  Создается файбер со стеком 1 мб и указателем на функцию f
SwitchToFiber(p2) ;      Осуществляется переход на файбер по адресу p2


Игорь Шевченко   (2004-10-30 17:22:00) [9]


> почему в моем примере ничего не работает?


А ты по шагам распиши, что твой пример должен делать. Можешь для себя, можешь для форума.


Scorpion   (2004-10-30 17:17:00) [10]

Я это знаю.Тем не менее ,если можешь, пожалуйста объясни : почему в моем примере ничего не работает?


Scorpion   (2004-10-30 17:13:00) [11]

Зачем тогда их создавали?


MBo   (2004-10-30 17:11:00) [12]

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


DiamondShark   (2004-10-30 17:02:00) [13]


> Хочу понять какие новые возможности открываются при их применение.

Никакие.


Scorpion   (2004-10-30 16:45:00) [14]

Из любопытства.Хочу понять какие новые возможности открываются при их применение.


Scorpion   (2004-10-30 16:36:00) [15]

Можно , но примеры там на С++ , а я c этим языком мало знаком.
В теории мне вроде все понятно , но на практике ничего не работает.

procedure f;
begin
Form1.Edit1.Text:='???';
end;

procedure TForm1.Button2Click(Sender: TObject);
var p,p2:pointer;
begin
p:=nil;
p2:=nil;
ConvertThreadToFiber(p);    
(CreateFiber(0,@f,p2));
SwitchToFiber(p2) ;
end;

p,p2 остаются nil ; SwitchToFiber(p2) выдает ошибку.


MBo   (2004-10-30 16:15:00) [16]

Почитать об это можно в книге Рихтера.

>Пожалуйста , помогите.
А ты код привел, чтобы разговор был не беспредметным?

Кстати, по какой причине тебе понадобилось использовать именно Fibers?


Наверх

Титульная страница Поиск, карта сайта Написать письмо