Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Вниз

Дождаться завершения выполнения другой функции   Найти похожие ветки 

 
Incognito   (2006-10-14 06:10) [0]

Здравствуйте, такой вопрос:

приложение работает с удаленным сервером. Для работы с ним использую компонент httpGet, который умеет отправлять запрос на сервер при помощи вызова процедуры GetString, а результат возвращает в событиях OnDoneString(Sender: TObject; Result: String) или OnError.

Дак вот...
при старте программы необходимо проверить валидность некоего id, введенного юзером, сверив его с тем, что есть на сервере.

Для этого написал функцию isValidId, задача которой вернуть true если этот id верный и false в противном случае, но проблема в том, что отправив запрос (httpChecker.GetString) результат мы получим в другой процедуре (OnDoneString), а надо бы, чтобы isValidId все-таки вернула как-то результат.

попытался решить проблему так: завел 2 глобальных переменных isCheckingId, isValidIdResult. Перед вызовом процедуры httpChecker.GetString переменной isCheckingId:=true вхожу в цикл while true do, где не каждой итерации провряю не изменилось ли состояние переменной isCheckingId на фолз, которое должно измениться по окончанию выполнения процедур OnDoneString и OnError.

Вообщем, думаю, кусок кода объяснит все лучше, чем я.


...
...
var
 fmMain: TfmMain;
 isValidIdResult : boolean = false;
 isCheckingId : boolean = false;

...
...

procedure TfmMain.isValidId(id : string);
begin
httpChecker.URL := url + id;
isChecking := true;
httpChecker.GetString;
while true do
 if isChecking = false
   then
     begin
     result := isValidIdResult;
     break;
     end;
end;

procedure TfmMain.httpCheckerDoneString(Sender: TObject; Result: String);
begin
if getDataFromPage(result, newData) then isValidIdResult := true;
isChecking := false;
end;

procedure TfmMain.httpCheckerError(Sender: TObject);
begin
isValidIdResult := false;
isChecking := false;
end;


Да, и, собственно вопрос - корректен ли такой способ, если он вообще осуществим. И есть ли более изящные решения.

З.Ы. Я не профессионал, так.. любитель, так что прошу простить, если что не так, набраться терпения и объяснить, если не трудно, конечно )

заранее спасибо всем кто ответит по делу


 
Incognito   (2006-10-14 06:15) [1]

Опечатался немного..
конечно же не
procedure TfmMain.isValidId(id : string);
а
function TfmMain.isValidId(id : string) : boolean;


 
Ketmar ©   (2006-10-14 06:17) [2]

а почему бы не работать с сокетами в блокирующем режиме?


 
Incognito   (2006-10-14 06:27) [3]

да, как и предполагалось, приложение зависло.

2 Ketmar
1. потому что приложение уже написано практически и во всю использует этот компоненит;
2. Я, к сожалению, не умею работать с сокетами, и уж тем более в блокирущем режиме )

По сути вопрос простой ведь. Можно ли при выполнении функции каким то образом дождаться завершения другой функции.. или изменения какой-то глобальной переменной... Вообщем, я подозреваю, что для этого что-то придумано человечеством.... и, собственно, прошу подсказать


 
Чапаев ©   (2006-10-14 09:39) [4]

Взять idHTTP из Indy... Тав всё равно всё на блокирующих сокетах.


 
Anatoly Podgoretsky ©   (2006-10-14 13:36) [5]


> и во всю использует этот компоненит;

Загадочная вещь, может и с нами поделишься или будешь трепаться и далее?


 
Anatoly Podgoretsky ©   (2006-10-14 13:36) [6]


> Ketmar ©   (14.10.06 06:17) [2]
> а почему бы не работать с сокетами в блокирующем режиме?
>

Не обязательно блокирующие сокеты, достаточно синхронных функций.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.046 c
2-1160837265
pathfinder
2006-10-14 18:47
2006.10.29
OpenFile


2-1160546413
Antoxa2005
2006-10-11 10:00
2006.10.29
Подскажите, как правильно написать, что бы при ShowModal окно не


2-1160997990
Jimmy
2006-10-16 15:26
2006.10.29
Работа с Sys Tray.


2-1160571980
проходил мимо решил заглянуть
2006-10-11 17:06
2006.10.29
Как скопировать все файлы без подкаталогов


15-1159447965
Ученик чародея.
2006-09-28 16:52
2006.10.29
В наших вузах программистов учат всякой ерунде





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский