Форум: "WinAPI";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
ВнизFiber Найти похожие ветки
← →
Scorpion (2004-10-30 15:56) [0]Не ясен принцип работы функций CreateFiber,ConvertThreadToFiber.
При их вызове почему то указатель на файбер остается равен nill . Пожалуйста , помогите.
← →
MBo © (2004-10-30 16:15) [1]Почитать об это можно в книге Рихтера.
>Пожалуйста , помогите.
А ты код привел, чтобы разговор был не беспредметным?
Кстати, по какой причине тебе понадобилось использовать именно Fibers?
← →
Scorpion (2004-10-30 16:36) [2]Можно , но примеры там на С++ , а я 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) выдает ошибку.
← →
Scorpion (2004-10-30 16:45) [3]Из любопытства.Хочу понять какие новые возможности открываются при их применение.
← →
DiamondShark © (2004-10-30 17:02) [4]
> Хочу понять какие новые возможности открываются при их применение.
Никакие.
← →
MBo © (2004-10-30 17:11) [5]на мой неискушенный взгляд, никакой пользы от их использования нет. как пишет Рихтер, введены они для удобства портирования юниксных наработок, при этом системной поддержки, планирования выполнения подобно потокам нет - все руками.
← →
Scorpion (2004-10-30 17:13) [6]Зачем тогда их создавали?
← →
Scorpion (2004-10-30 17:17) [7]Я это знаю.Тем не менее ,если можешь, пожалуйста объясни : почему в моем примере ничего не работает?
← →
Игорь Шевченко © (2004-10-30 17:22) [8]
> почему в моем примере ничего не работает?
А ты по шагам распиши, что твой пример должен делать. Можешь для себя, можешь для форума.
← →
Scorpion (2004-10-30 17:32) [9]ConvertThreadToFiber(p); Поток ассоциируется с файбером
(CreateFiber(0,@f,p2)); Создается файбер со стеком 1 мб и указателем на функцию f
SwitchToFiber(p2) ; Осуществляется переход на файбер по адресу p2
← →
Игорь Шевченко © (2004-10-30 18:24) [10]
> p,p2 остаются nil
Так ты написал в самом начале, что они равны nil - вот они и остались.
> (CreateFiber(0,@f,p2)); Создается файбер со стеком 1 мб
> и указателем на функцию f
Почитай описание функции, у нее есть возвращаемое значение. Которое обычно и передается в SwitchToFiber.
← →
Scorpion (2004-10-30 21:35) [11]Функция возвращает longbool , хотя в описание написано иное.Я предположил что 3 параметр переменный(p2).Так что проблема не решена:(((
← →
Игорь Шевченко © (2004-10-30 22:26) [12]Почитай описание фукнции CreateFiber. Почитай Рихтера.
← →
Scorpion (2004-10-30 22:32) [13]Почитал и Рихтера и описание...3 день читаю .
Ответов на мои вопросы там к сожалению нет: (((
Функция(CreateFiber) возвращает longbool , хотя в описание написано иное.Я предположил что 3 параметр переменный(p2).Так что проблема не решена:(((
← →
Игорь Шевченко © (2004-10-30 22:51) [14]
> Функция(CreateFiber) возвращает longbool
Увы, глюк у Borland.
Ее прототип должен был объявлен, какfunction CreateFiber(dwStackSize: DWORD; lpStartAddress: LPFIBER_START_ROUTINE;
lpParameter: LPVOID): LPVOID; stdcall;
← →
Scorpion (2004-10-30 23:17) [15]Слегка помогло :
p:=nil;
p2:=nil;
p4 :=GetFiberData;
p5:=GetFiberData;
p:=ConvertThreadToFiber(p4);
p2:=CreateFiber(0,@f,p5);
SwitchToFiber(p2);
Но SwitchToFiber(p2); не переходит на функцию ,a завершает приложение.
← →
Scorpion (2004-10-30 23:28) [16]ВСЕ...:))) Получилось.Большое вам спасибо.:)))
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.041 c