![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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?