powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Баг или фича в PPL. TTask.Cancel & Wait
25 сообщений из 26, страница 1 из 2
Баг или фича в PPL. TTask.Cancel & Wait
    #39642356
hottabych31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Уже полдня бодаюсь с какой-то неведомой чушью...
task: ITask;

1. Запускаю задачу task:= TTask.Run(procedure begin sleep(10000) end);

2. Отменяю задачу task.Cancel;

Тут мне надо подождать , пока задача выполнится
3. task.Wait;
И вместо того, чтобы подождать задачу и выстрелить exception Operation Canceled, происходит сразу выброс этого исключения, что совсем не в тему.

Я дурак или лыжи не едут?
Спасибо!
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39642419
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39642433
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Cite,

Древенеславянские программисты говаривали в таких случаях, - видит око, да зуб неймет.
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39642434
hottabych31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обидно, слющай... Подумывал, обновиться до последнего релиза, а тут такая бага и не закрытая. А у меня уже не один проект на PPL с костылями, а как-то Omni тащить не хочется... Видимо, придется.
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39642506
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hottabych31а как-то Omni тащить не хочется... Видимо, придется.
А разве в Omni можно отменить уже выполняющуюся задачу?..
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39642624
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А это точно не by design? Зачем ждать отменённую задачу?
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39642627
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У людей ассоциация с "TThread.Terminate" небось.
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39642691
hottabych31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GunSmoker,

Может и by design...

У меня из главного потока создавалась задача.
Задача синхронизировалась с главным потоком и дергала VCL + дргие объекты главного потока.
И, чтобы при закрытии формы не вылетал access violation, я при закрытии формы хотел отменить задачу, подождать пока завершится цикл (обработавший флаг TtaskStatus.tsCanceled), и тогда убить владельца задачи.

Может быть я не прав и задача не должна зависеть от владельца (или делать проверки на nil), тем не менее, семантика ITask мне не очень понятна.
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39642802
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде понятная же семантика? Если задача отменена, то результат её выполнения известен: нет результата, отменена задача. Соответственно, и ждать наперёд известного результата незачем. Это всё равно что Sleep(20000) в программу вставить.

А вы пытаетесь несколько иные технические вопросы решить.

Вроде как есть два варианта:
1. Перед обращением к глобальным / расшаренным данным проверять их наличие / корректность (не забывая про блокировку / синхронизацию).
2. Использовать какой-нибудь иной признак окончания фоновой работы. Тут я не подскажу, ибо без понятия, кто это такой: PPL и TTask.
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39642832
hottabych31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Omni это красиво сделано...

//FTask: IOmniTaskControl;
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
procedure TForm1.btnStartClick(Sender: TObject);
begin
  FTask := CreateTask(
    procedure(const task: IOmniTask)
    var
      i: integer;
    begin
      for i := pb1.Min to pb1.Max do
      begin
        if task.CancellationToken.IsSignalled then
          exit;

        TThread.Synchronize(TThread.Current, procedure begin pb1.Position := i end);
        sleep(100);
      end;

    end).Run;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if FTask<>nil then
    FTask.CancellationToken.Signal;
end;
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39642836
hottabych31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GunSmokerТут я не подскажу, ибо без понятия, кто это такой: PPL и TTask.

Никак не ожидал услышать это от вас. А через что вы работаете с многопоточностью?
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39642845
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hottabych31Никак не ожидал услышать это от вас. А через что вы работаете с многопоточностью?
Подозреваю, что с помощью потоков.
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39642846
Фотография kloun02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockhottabych31Никак не ожидал услышать это от вас. А через что вы работаете с многопоточностью?
Подозреваю, что с помощью потоков.+1
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39642849
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

Только хардкор, только голый WinApi!
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39642851
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hottabych31, мой код должен работать в Delphi 5, так что большинство нововведений проходят мимо меня.
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39642976
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GunSmokerмой код должен работать в Delphi 5, так что большинство нововведений проходят мимо меняЖесть...
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39642993
подован
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerGunSmokerмой код должен работать в Delphi 5, так что большинство нововведений проходят мимо меняЖесть...
Жесть потому что DevExpress с D5 уже не работают - угадал??
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39642994
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
подованwhite_niggerпропущено...
Жесть...
Жесть потому что DevExpress с D5 уже не работают - угадал??
и не только лишь с D5
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39643007
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
практически все коробочные "нововведения" давным давно существуют в виде сторонних либ к-е как правило лучше эмбракодела, так что я гораздо сильнее удивляюсь когда удивляются тому что ув. GunSmoker не юзает "вдруг" коробочный ttask. да у него своего добра и вероятно гораздо лучшего в ассортименте
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39643026
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подованЖесть потому что DevExpress с D5 уже не работают - угадал?? Неа. Жесть - потому что жесть :)
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39643028
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerGunSmokerмой код должен работать в Delphi 5, так что большинство нововведений проходят мимо меняЖесть...ну а чё, норм - он же системщик как я понимаю, ему пофиг
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39643032
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)ну а чё, норм - он же системщик как я понимаю, ему пофигДа причём тут системщик. Я просто хорошо помню когда приходилось поддерживать зоопарк версий. Там много неочевидного гемора
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39643033
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
kealon(Ruslan)white_niggerпропущено...
Жесть...ну а чё, норм - он же системщик как я понимаю, ему пофиг
Тсссс, а то сейчас Жадика вызовешь
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39643215
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerЯ просто хорошо помню когда приходилось поддерживать зоопарк версий. Там много неочевидного гемора

На самом деле, если VCL и компоненты не трогать, то не так уж много запар. Сделать модуль, куда скопировать недостающий функционал.

А вот D4 и D3, и уж тем более билдер 5-6 - это ****** просто. Да хотя бы: просто немеренно времени угроблено на устранение крашей компилятора.
...
Рейтинг: 0 / 0
Баг или фича в PPL. TTask.Cancel & Wait
    #39643252
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GunSmokerДа хотя бы: просто немеренно времени угроблено на устранение крашей компилятора.акстись-акстись ...
разбудил старые кошмары, которые забыл после 7-ки
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Баг или фича в PPL. TTask.Cancel & Wait
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]