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

Вниз

ожидание выполнения процедуры   Найти похожие ветки 

 
nord   (2011-02-24 21:10) [0]

Здравствуйте!
Как можно узнать выполнилась ли вызываемая процедура и ожидать пока она этого не сделает?
Просто в обычном варианте расчеты в процедуре не успевают полностью "просчитаться" и программа идет дальше по тексту, что нарушает ход работы...
Пробовал поставить флаг, но походу он тоже игнорится самими расчетами..

Спасибо


 
Palladin ©   (2011-02-24 21:15) [1]

Какие ваши доказательства?


 
KilkennyCat ©   (2011-02-24 21:16) [2]

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

что-то не договариваешь.


 
nord   (2011-02-24 22:03) [3]

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

str:="";
   for i:=1 to length(memoLogg2.Text)do
   begin
   if i mod 2 =0 then kk:=ord(memoLogg2.text[i])+(i mod 7)*2 else
   kk:=ord(memoLogg2.text[i])+i mod 10;
   repeat
   if kk>255 then kk:=kk-255;
   if kk<1 then kk:=kk+255;
   until (kk>0)and(kk<256);
   str:=str+chr(kk);
   end;
memoLogg.Text:=str;

и эта конструкция в коде не успевает полностью выполняться.. как-то глючно получается... стоит искать проблему в другом месте? просто если вместо этих преобразований записать просто не обработку, а копирование текста из одного мемо в другое:
memoLogg.Text:=memoLogg2.Text
то все идет без проблем, причем текст может быть внушительных размеров, тогда как при шифровании происходит сбой очень быстро...
сама функция шифрования верна, написана в отдельной программе для проверки и работает замечательно, разве что заметна задержка при большом объеме информации..


 
KilkennyCat ©   (2011-02-24 22:14) [4]


> заметна задержка

ну еще бы:

>  for i:=1 to length(memoLogg2.Text)


это:

> repeat
>    if kk>255 then kk:=kk-255;
>    if kk<1 then kk:=kk+255;
>    until (kk>0)and(kk<256);

тоже упрощается.


 
nord   (2011-02-24 22:18) [5]

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


 
KilkennyCat ©   (2011-02-24 22:19) [6]


> for i:=1 to do
>    begin
>    if i mod 2 =0

я бы заменил на
ln := length(memoLogg2.Text);
i := 0;
if ln > 2 then
 repeat
   inc(i,2)
.....
 until ... i >= ln;


 
KilkennyCat ©   (2011-02-24 22:23) [7]


> так как они есть гораздо хуже моего,

не в данном случае.

в любом случае, надо сразу писать нормально, эмуляция "плохого" компа через плохой код - это глупо.

str - лишняя.

но в любом случае, есть некоторая недоговоренность.
приведенный код не объясняет вопроса.


 
Игорь Шевченко ©   (2011-02-24 22:37) [8]

ужос

не прще ли взять строку и работать с ней, а не дергать каждый раз memo.text ? Или хотя бы представлять, что за этим вызовом стоит.


 
Игорь Шевченко ©   (2011-02-24 22:37) [9]

шифровальщики недоделанные


 
sniknik ©   (2011-02-24 22:49) [10]

> str - лишняя.
да как сказать... скорее лишнее все остальное...


 
KilkennyCat ©   (2011-02-24 22:58) [11]


> sniknik ©   (24.02.11 22:49) [10]

да, наверное. я вообще наошибался. неудобно читать, неформатно.


 
nord   (2011-02-24 23:01) [12]

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

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


 
Юрий Зотов ©   (2011-02-24 23:12) [13]

> nord   (24.02.11 21:10)  

> Как можно узнать выполнилась ли вызываемая процедура и ожидать пока
> она этого не сделает?

Если не порождаются вторичные потоки, то ничего специального не требуется.
вызов_процедуры;
следующая_строка_кода;

Когда начнет выполняться следующая_строка_кода, то это и будет означать, что выполнение процедуры полностью закончилось.

> расчеты в процедуре не успевают полностью "просчитаться" и программа
> идет дальше по тексту, что нарушает ход работы...

Этого не может быть (если, конечно, не порождаются вторичные потоки).


 
nord   (2011-02-24 23:22) [14]

понятно, спасибо)


 
Anatoly Podgoretsky ©   (2011-02-25 10:28) [15]

Приведеный текст не может выполниться не полностью.


 
KilkennyCat ©   (2011-02-25 13:03) [16]


> Anatoly Podgoretsky ©   (25.02.11 10:28) [15]

может. например, обработка memo.text под два гигабайта, а через пять минут свет выключили.


 
Anatoly Podgoretsky ©   (2011-02-25 13:34) [17]

> KilkennyCat  (25.02.2011 13:03:16)  [16]

Пусть ждет когда включат, или пусть UPS купит, а не жалуется.


 
abb777 ©   (2011-02-26 22:44) [18]

свои 2 коп позволю снбе вставить:

str:=str+chr(kk);

Так никогда не надо делать, если заранее известно, какой длины в конце концов будет строка. Как в данном случае.

Надо:

SetLength(str, length(memoLogg2.Text))
.................
str[i] := chr(kk);

А вылететь недоработав до конца, может только по исключению. Попробовать окружить вызов процедуры try...except и посмотреть, что будет. Хотя, откуда там исключения...



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

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

Наверх




Память: 0.49 MB
Время: 0.003 c
15-1297838969
DiamondShark
2011-02-16 09:49
2011.06.05
Тулзы для Оракла


15-1297690649
Gu
2011-02-14 16:37
2011.06.05
Как получить индекс производительности windows


15-1298237396
Юрий
2011-02-21 00:29
2011.06.05
С днем рождения ! 21 февраля 2011 понедельник


15-1297937141
Ламот
2011-02-17 13:05
2011.06.05
Звонки с диалапмодема...


10-1175163652
Scoba
2007-03-29 14:20
2011.06.05
Программная прокрутка





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский