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

Вниз

Работа с потоками   Найти похожие ветки 

 
..::KraN::..   (2007-12-10 15:22) [0]

У меня есть функция, в которой присутствует цикл (ищет и удалят символы в TMemo), возвращает значение string, и имеет входящий параметр s:string. Как это можно реализовать, но чтобы потом в переменную, скажем, str возвращался результат работы функции. Желательно поподробнее.


 
trubin ©   (2007-12-10 15:27) [1]

Странно заголовок топика "Работа с потоками", а в вопросе про потоки не слова :)


 
Dib@zol ©   (2007-12-10 15:29) [2]

%)
Ваще нихига не понял.
У тебя есть функция. Так? Так.
Она способна возвращать значение типа string.
Ну дык вот ты и берёшь свою переменную str и присваиваешь ей результат, который вернула функция.
Ъ?


 
..::KraN::..   (2007-12-10 16:17) [3]

Забыл написать (как поместить эту функкцию в поток), т.к. она грузит очень сильно проц.


 
DiamondShark ©   (2007-12-10 16:19) [4]

Думаешь, помещённая в поток она будет "грузить проц" меньше? С чего бы это...


 
..::KraN::..   (2007-12-10 16:21) [5]

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


 
Сергей М. ©   (2007-12-10 16:25) [6]


> чтобы потом в переменную, скажем, str возвращался результат
> работы функции


И каким по логике должен быть этот результат, если выполнение функции отменено "нажатием на кнопку" ?


 
Palladin ©   (2007-12-10 16:25) [7]

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


 
DiamondShark ©   (2007-12-10 16:27) [8]

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

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


 
Palladin ©   (2007-12-10 16:27) [9]

кстати, а правда... :) где потоки то в вопросе...


 
..::KraN::..   (2007-12-10 16:29) [10]


> а вообще подозреваю что тело потока организовано кривося
> накося и/или, с подачи Арзангельского, все делается в Synchronize.
> ..

Вот я и спрашиваю, как вообще создать поток, потому что у меня его вообще нет.


 
DiamondShark ©   (2007-12-10 16:31) [11]


> потому что у меня его вообще нет.

А он тебе вообще нужен?
Вот мы тебе нарисуем, как "поместить в поток", а потом ты придёшь спрашивать, как тебе прервать поток.

У тебя в функции есть место, где её можно корректно прервать? Без насилия над логикой?


 
Palladin ©   (2007-12-10 16:31) [12]


> Вот я и спрашиваю, как вообще создать поток

где ж ты интересно спросил то... перечитал вопрос нифига не нашел...


 
..::KraN::..   (2007-12-10 16:32) [13]


> где ж ты интересно спросил то...

Вот здесь...
> ..::KraN::..   (10.12.07 16:17) [3]


 
Сергей М. ©   (2007-12-10 16:40) [14]


> надо сделать так, чтобы выполнение этой функции можно было
> бы отменить


И для этого функцию нужно непременно поместить в поток ?


 
..::KraN::..   (2007-12-10 16:49) [15]

А как ещё можно?


 
Palladin ©   (2007-12-10 16:54) [16]

TMyThread=Class(TThread)
 Private
  m_strData:String;
  m_strResult:String;
 Protected
  Procedure Execute; Override;
 Public
  Constructor Create(Const s:String);
  Property Result:String Read m_strResult;
End;

Constructor TMyThread.Create;
Begin
 m_strData:=s;
 Inherited Create(True);
 Priority:=tpLower;
 Resume;
End;

Procedure TMyThread.Execute;
Var
 s:String;
Begin
 For i:=0 to чего то там Do
  Begin
   If Terminated Then Exit;
   чего то делаем
  End;
m_strResult:=s;
End;

Procedure TForm.ButtonStopClick(Sender:TObject);
Begin
MyThread.Terminate;
// можно и подождать MyThread.WaitFor;
End;


 
..::KraN::..   (2007-12-10 16:57) [17]


> Palladin ©   (10.12.07 16:54) [16]

Спасибо, попробую!


 
trubin ©   (2007-12-10 16:58) [18]


> Забыл написать (как поместить эту функкцию в поток), т.к.
>  она грузит очень сильно проц.


Видимо внешне это выражается в подвисании GUI программы

Можно запускать ее в основном потоке, но в итерациях цикла вызывать application.ProcessMessages, чтобы сообщения обрабатывались.



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

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

Наверх





Память: 0.49 MB
Время: 0.004 c
15-1196791428
@!!ex
2007-12-04 21:03
2008.01.06
Драйвер на Windows 2003 Server


2-1197311875
Ruzzz
2007-12-10 21:37
2008.01.06
точка в имени папки


3-1188654911
-novice-
2007-09-01 17:55
2008.01.06
индексы в связанных таблицах


15-1196479897
Ricks
2007-12-01 06:31
2008.01.06
Кто у нас силен в математике?


2-1197293148
deras
2007-12-10 16:25
2008.01.06
Помогите с запросом





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