Форум: "Начинающим";
Текущий архив: 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