Форум: "Прочее";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];
ВнизВопрос про потоки Найти похожие ветки
← →
dnepr (2009-06-15 00:00) [40]TNewThread = class(TThread)
private
protected
procedure Execute; override;
end;
procedure TNewThread.Execute;
begin
{отправка письма с аттачем через idsmtp}
end;
//запускаю поток
procedure TForm1.Button1Click(Sender: TObject);
var
NewThread: TNewThread;
begin
NewThread:=TNewThread.Create(true);
NewThread.FreeOnTerminate:=true;
NewThread.Priority:=tpLower;
NewThread.Resume;
end;
// пытаюсь не прерывать поток при закрытии формы...
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
NewThread: TNewThread;
begin
If NewThread.Suspended Then NewThread.Resume;
NewThread.Terminate;
//else NewThread.Free;
end;
← →
Игорь Шевченко © (2009-06-15 00:08) [41]Бп!
← →
sniknik © (2009-06-15 00:09) [42]а где построчные описания?
тебе не потоки, тебе азбуку программирования учить надо...
вот это что такое?
> var
> NewThread: TNewThread;
а судя по бедному описанию класса потока, "отправка" ссылается на компоненты брошенные на форму...
← →
sniknik © (2009-06-15 00:13) [43]> там ничего не понял.
оно и понятно, при таком базовом уровне
> Объясните на пальцах и поподробнее пожалуйста
высылай пальцы! попытаюсь...
← →
Эстет (2009-06-15 00:17) [44]> dnepr (15.06.09 00:00) [40]
Где коментарий КАЖДОЙ строки?
← →
Эстет (2009-06-15 00:21) [45]Хотя бы этого участка
procedure TForm1.Button1Click(Sender: TObject);
var
NewThread: TNewThread;
begin
NewThread:=TNewThread.Create(true);
NewThread.FreeOnTerminate:=true;
NewThread.Priority:=tpLower;
NewThread.Resume;
end;
начиная с var. Т.е.
var // что это...
и т.д.
← →
oldman © (2009-06-15 00:36) [46]Блин, давно пора придумать компонент Thread.
Бросил на форму и делов...
← →
Andy BitOff © (2009-06-15 09:00) [47]
> oldman © (15.06.09 00:36) [46]
Дык есть ужо. BmDelphiThread, например, юзал как-то еще под D5. Сейчас поп поиску посмотрел вроде обновление до D2005 есть.
← →
Сергей М. © (2009-06-15 12:43) [48]
> блин.. сделал так
> а еще сделал вот так
Чудовищные блины)
Ты будешь комментировать каждый свой блин или нет ?
← →
Dennis I. Komarov © (2009-06-15 13:54) [49]
> Ты будешь комментировать каждый свой блин или нет ?
И как комментировать "Метод научного тыка"?
← →
Palladin © (2009-06-15 14:18) [50]Вчера около 11 часов вечера в лаборатории №17 методом научного тыка было получено удовольствие!
← →
sniknik © (2009-06-15 14:28) [51]а утром в 10.30 совершено открытие века! примерно через 5 минут открылось и второе веко...
люди, да он давно сбежал, он же хотел код/пример, а его тут какие то вопросы начали спрашивать... неважно что вопросы из разряда "какого цвета учебник, раз говоришь учил" все одно это воспринимается как "во валит гад! сматываемся отсюда". © цитат из какого то анекдота.
← →
dnepr (2009-06-15 17:29) [52]я не смотался. я здесь.
описание:
var
NewThread: TNewThread;
begin
//тут мы создали экземпляр класса TNewThread. Конструктор Create имеет //всего один параметр - CreateSuspended типа boolean, который указывает, //запустить новый поток сразу после создания (если false), или дождаться //команды (если true).
NewThread:=TNewThread.Create(true);
//свойство FreeOnTerminate определяет, что поток после выполнения //автоматически завершится, объект будет уничтожен, и нам не придётся его //уничтожать вручную. В нашем примере это не имеет значения, так как сам //по себе он никогда не завершится, но понадобится в следующих примерах.
NewThread.FreeOnTerminate:=true;
//устанавливает приоритет потока
NewThread.Priority:=tpLower;
//запуск потока.
NewThread.Resume;
end;
тут написано: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1370
← →
dnepr (2009-06-15 17:30) [53]слегка накосячил в посте
← →
Сергей М. © (2009-06-15 17:35) [54]
> dnepr (15.06.09 17:29) [52]
Каково, по-твоему, время жизни переменной NewThread ?
← →
dnepr (2009-06-15 17:42) [55]Сергей М., время жизни зависит от времени выполнения потока наверное
← →
Dennis I. Komarov © (2009-06-15 17:43) [56]
> наверное
ты программист или где?
← →
Сергей М. © (2009-06-15 17:46) [57]
> dnepr (15.06.09 17:42) [55]
Если переменная статическая, то с некоторой долей условности можно сказать, что да. Иначе - нет.
А у тебя о каком потоке идет речь в [52] ?
И каково время его жизни ?
И какая переменная - статическая или локальная ?
← →
dnepr (2009-06-15 17:54) [58]я думаю что переменная статическая.
а время жизни потока зависит от этой строчки:
NewThread.FreeOnTerminate:=true;
← →
Эстет (2009-06-15 17:56) [59]> dnepr (15.06.09 17:29) [52]
Я же не просто так спросил у тебя что такое var. Что такое var в твоём коде? Ты так и не написал.
← →
dnepr (2009-06-15 17:57) [60]var - объявление переменной
← →
Dennis I. Komarov © (2009-06-15 17:58) [61]
> dnepr (15.06.09 17:54) [58]
Компьютер, уберите два не верных ответа...
← →
Эстет (2009-06-15 17:58) [62]> dnepr (15.06.09 17:57) [60]
> var - объявление переменной
Блин. Какой? Ну что из тебя по слову все вытаскивать.
← →
Сергей М. © (2009-06-15 17:58) [63]
> думаю что переменная статическая
На основании чего ты так думаешь ?
> время жизни потока зависит от этой строчки:
> NewThread.FreeOnTerminate:=true;
Абсолютно не зависит.
Переменная NewThread рождается, живет и умирает совсем в другом потоке - в основном.
← →
Dennis I. Komarov © (2009-06-15 18:01) [64]
> живет и умирает
и очень быстро...
← →
dnepr (2009-06-15 18:03) [65]
> На основании чего ты так думаешь ?
потому что динамическая бы изменялась во время выполнения а эта нет
> Блин. Какой? Ну что из тебя по слову все вытаскивать.
NewThread
← →
clickmaker © (2009-06-15 18:03) [66]> как при закрытии окна программы сделать ожидание завершения
> потока , а затем выход
то закрывать окно, но не убивая поток...
то, не закрывая окна, ждать поток...
что все-таки нужно?
← →
Эстет (2009-06-15 18:04) [67]больно слышать © Игорь Шевченко
← →
Сергей М. © (2009-06-15 18:05) [68]
> а эта нет
>
На основании чего ты утверждаешь, что она не изменяется ?
> во время выполнения
Во время выполнения чего ?
← →
dnepr (2009-06-15 18:06) [69]
> то закрывать окно, но не убивая поток...
> то, не закрывая окна, ждать поток...
мне нужно закрыть окно, но не убивая поток.
← →
dnepr (2009-06-15 18:07) [70]
> Во время выполнения чего ?
во время выполнения потока.
> На основании чего ты утверждаешь, что она не изменяется
> ?
дак она изменяется?
← →
Юрий Зотов © (2009-06-15 18:07) [71]> dnepr
Переменная NewThread объявлена в методе Button1Click - с чего же она будет известна в методе FormClose? Это ведь уже другой метод.
Даже если в методе FormClose объявить переменную с тем же именем (как у Вас), то это будет уже другая переменная, ничего общего с первой не имеющая.
Значит, эту переменную надо объявить не в методе Button1Click, а в другом месте - так, чтобы она была доступна в обоих методах. Подумайте, как это сделать. Подсказка - оба метода принадлежат одной и той же форме и находятся в одном и том же модуле.
Потом подумайте - зачем Вы автоматически уничтожаете поток (FreeOnTerminate) сразу после его завершения? А если он завершится до того, как будет закрыта форма - ведь тогда переменная NewThread будет указывать на уже несуществующий объект и при обращении к ней в методе FormClose возникнет ошибка.
Далее подумайте, зачем Вам нужен приоритет tpLower? Не нужно слепо копировать примеры.
Ну и наконец, подумайте - как может завершиться Ваша программа, если Вы не даете закрыться ее главной форме (CanClose)? Что надо написать в методе FomClose, чтобы форма:
- дождалась завершения потока;
- уничтожила его;
- закрылась.
← →
Dennis I. Komarov © (2009-06-15 18:08) [72]А не развод ли?
← →
Сергей М. © (2009-06-15 18:10) [73]
> блин.. сделал так
>
> procedure TForm1.Button1Click(Sender: TObject);
> var
> NewThread: TNewThread; //это ЛОКАЛЬНАЯ переменная, время ее жизни равно времени выполнения обработчика клика кнопки, выполняемого в ОСНОВНОМ потоке процесса приложения
> а еще сделал вот так:
>
> procedure TForm1.Button1Click(Sender: TObject);
> var
> NewThread: TNewThread;//И это тоже это ЛОКАЛЬНАЯ переменная, время ее жизни равно времени выполнения обработчика клика кнопки, выполняемого в ОСНОВНОМ потоке процесса приложения
> procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose:
> Boolean);
> var
> NewThread: TNewThread; //И это тоже это ЛОКАЛЬНАЯ переменная, время ее жизни равно времени выполнения обработчика клика кнопки, выполняемого в ОСНОВНОМ потоке процесса приложения
> begin
> If NewThread.Suspended Then NewThread.Resume; //ЧЕМУ, по-твоему, равно значение этой переменной, если она ТОЛЬКО ЧТО начала жить в ОСНОВНОМ потоке и ты в нее ничего не записал ?
← →
Игорь Шевченко © (2009-06-15 18:10) [74]одним спамером станет меньше
← →
Юрий Зотов © (2009-06-15 18:22) [75]Боже...
Вот пример. Изучите его досконально, чтобы стала понятна каждая буква.
type
TForm1 = class(TForm)
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var CanClose: boolean);
private
NewThread: TNewThread;
procedure ThreadTerminated(Sender: TObject);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if NewThread = nil then
begin
NewThread := TNewThread.Create(True)
NewThread.OnTerminate := ThreadTerminated;
NewThread.Resume;
Button1.Enabled := False
end
end;
procedure TForm1.FormClose(Sender: TObject; var CanClose: boolean);
begin
if NewThread <> nil then
NewThread.WaitFor
end;
procedure TForm1.ThreadTerminated(Sender: TObject);
begin
FreeAndNil(NewThread);
Button1.Enabled := True
end;
← →
Сергей М. © (2009-06-15 18:24) [76]
> dnepr (15.06.09 18:07) [70]
> во время выполнения потока
Какого потока-то ?
Их у тебя 2) ..
> дак она изменяется?
Если ты сам ее не изменишь, то не изменяется.
Но содержимое локальной переменной в момент рождения не определено и ты его тоже не определил.
← →
MonoLife © (2009-06-15 18:35) [77]
> clickmaker © (15.06.09 18:03) [66]
> что все-таки нужно?
>
сервер ему нужен..
← →
dnepr (2009-06-15 18:35) [78]Юрий Зотов, спасибо за исчерпывающий ответ! я бы вам руку пожал, да не смогу это сделать к сожалению
> > If NewThread.Suspended Then NewThread.Resume; //ЧЕМУ,
> по-твоему, равно значение этой переменной, если она ТОЛЬКО
> ЧТО начала жить в ОСНОВНОМ потоке и ты в нее ничего не записал
> ?
оно ничему не будет равно
← →
Сергей М. © (2009-06-15 18:42) [79]
> оно ничему не будет равно
Будет. Переменная не может не иметь никакого значения.
Но значение это совсем не то которое ты ожидаешь.
← →
Сергей М. © (2009-06-15 18:44) [80]
> dnepr (15.06.09 18:35) [78]
Так ведь в [75], так же как и в Demos\Threads, нет комментариев)
Страницы: 1 2 3 4 вся ветка
Форум: "Прочее";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];
Память: 0.61 MB
Время: 0.012 c