Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Баг или фича в PPL. TTask.Cancel & Wait  [new]
hottabych31
Member

Откуда:
Сообщений: 105
Всем привет!

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

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

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

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

Я дурак или лыжи не едут?
Спасибо!
9 май 18, 14:48    [21397923]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1136
https://quality.embarcadero.com/browse/RSP-11267
9 май 18, 22:28    [21398663]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
Vlad F
Member

Откуда:
Сообщений: 218
X-Cite,

Древенеславянские программисты говаривали в таких случаях, - видит око, да зуб неймет.
10 май 18, 00:32    [21398790]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
hottabych31
Member

Откуда:
Сообщений: 105
Обидно, слющай... Подумывал, обновиться до последнего релиза, а тут такая бага и не закрытая. А у меня уже не один проект на PPL с костылями, а как-то Omni тащить не хочется... Видимо, придется.
10 май 18, 00:37    [21398794]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
alekcvp
Member

Откуда:
Сообщений: 1103
hottabych31
а как-то Omni тащить не хочется... Видимо, придется.

А разве в Omni можно отменить уже выполняющуюся задачу?..
10 май 18, 10:35    [21399245]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
GunSmoker
Member

Откуда:
Сообщений: 3071
А это точно не by design? Зачем ждать отменённую задачу?
10 май 18, 13:29    [21399799]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
rgreat
Member

Откуда:
Сообщений: 4390
У людей ассоциация с "TThread.Terminate" небось.
10 май 18, 13:41    [21399836]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
hottabych31
Member

Откуда:
Сообщений: 105
GunSmoker,

Может и by design...

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

Может быть я не прав и задача не должна зависеть от владельца (или делать проверки на nil), тем не менее, семантика ITask мне не очень понятна.
10 май 18, 14:41    [21400066]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
GunSmoker
Member

Откуда:
Сообщений: 3071
Вроде понятная же семантика? Если задача отменена, то результат её выполнения известен: нет результата, отменена задача. Соответственно, и ждать наперёд известного результата незачем. Это всё равно что Sleep(20000) в программу вставить.

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

Вроде как есть два варианта:
1. Перед обращением к глобальным / расшаренным данным проверять их наличие / корректность (не забывая про блокировку / синхронизацию).
2. Использовать какой-нибудь иной признак окончания фоновой работы. Тут я не подскажу, ибо без понятия, кто это такой: PPL и TTask.
10 май 18, 16:41    [21400550]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
hottabych31
Member

Откуда:
Сообщений: 105
В Omni это красиво сделано...

//FTask: IOmniTaskControl;
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;
10 май 18, 17:40    [21400707]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
hottabych31
Member

Откуда:
Сообщений: 105
GunSmoker
Тут я не подскажу, ибо без понятия, кто это такой: PPL и TTask.


Никак не ожидал услышать это от вас. А через что вы работаете с многопоточностью?
10 май 18, 17:43    [21400718]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 3562
hottabych31
Никак не ожидал услышать это от вас. А через что вы работаете с многопоточностью?

Подозреваю, что с помощью потоков.
10 май 18, 17:58    [21400764]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
kloun02
Member

Откуда:
Сообщений: 7132
YuRock
hottabych31
Никак не ожидал услышать это от вас. А через что вы работаете с многопоточностью?

Подозреваю, что с помощью потоков.
+1
10 май 18, 17:59    [21400766]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
rgreat
Member

Откуда:
Сообщений: 4390
YuRock,

Только хардкор, только голый WinApi!
10 май 18, 18:03    [21400772]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
GunSmoker
Member

Откуда:
Сообщений: 3071
hottabych31, мой код должен работать в Delphi 5, так что большинство нововведений проходят мимо меня.
10 май 18, 18:10    [21400792]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 1906
GunSmoker
мой код должен работать в Delphi 5, так что большинство нововведений проходят мимо меня
Жесть...
11 май 18, 02:57    [21401701]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
подован
Member

Откуда:
Сообщений: 220
white_nigger
GunSmoker
мой код должен работать в Delphi 5, так что большинство нововведений проходят мимо меня
Жесть...

Жесть потому что DevExpress с D5 уже не работают - угадал??
11 май 18, 07:11    [21401765]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
defecator
Member

Откуда:
Сообщений: 38711
подован
white_nigger
пропущено...
Жесть...

Жесть потому что DevExpress с D5 уже не работают - угадал??

и не только лишь с D5
11 май 18, 07:21    [21401775]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
vavan
Member

Откуда: Казань
Сообщений: 3107
практически все коробочные "нововведения" давным давно существуют в виде сторонних либ к-е как правило лучше эмбракодела, так что я гораздо сильнее удивляюсь когда удивляются тому что ув. GunSmoker не юзает "вдруг" коробочный ttask. да у него своего добра и вероятно гораздо лучшего в ассортименте
11 май 18, 08:35    [21401856]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 1906
подован
Жесть потому что DevExpress с D5 уже не работают - угадал??
Неа. Жесть - потому что жесть :)
11 май 18, 09:08    [21401921]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 3312
white_nigger
GunSmoker
мой код должен работать в Delphi 5, так что большинство нововведений проходят мимо меня
Жесть...
ну а чё, норм - он же системщик как я понимаю, ему пофиг
11 май 18, 09:10    [21401928]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 1906
kealon(Ruslan)
ну а чё, норм - он же системщик как я понимаю, ему пофиг
Да причём тут системщик. Я просто хорошо помню когда приходилось поддерживать зоопарк версий. Там много неочевидного гемора
11 май 18, 09:15    [21401940]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
defecator
Member

Откуда:
Сообщений: 38711
kealon(Ruslan)
white_nigger
пропущено...
Жесть...
ну а чё, норм - он же системщик как я понимаю, ему пофиг

Тсссс, а то сейчас Жадика вызовешь
11 май 18, 09:15    [21401942]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
GunSmoker
Member

Откуда:
Сообщений: 3071
white_nigger
Я просто хорошо помню когда приходилось поддерживать зоопарк версий. Там много неочевидного гемора


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

А вот D4 и D3, и уж тем более билдер 5-6 - это ****** просто. Да хотя бы: просто немеренно времени угроблено на устранение крашей компилятора.
11 май 18, 12:57    [21402842]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 3312
GunSmoker
Да хотя бы: просто немеренно времени угроблено на устранение крашей компилятора.
акстись-акстись ...
разбудил старые кошмары, которые забыл после 7-ки
11 май 18, 13:45    [21403005]     Ответить | Цитировать Сообщить модератору
 Re: Баг или фича в PPL. TTask.Cancel & Wait  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 1906
GunSmoker
тем более билдер 5-6 - это ****** просто
молчи, грусть, молчи... Билдер до сих пор, как бы помягче... Из последнего: когда делали nullable, регулярно отваливалось кодогенерация в простой по-сути записи, в разных версиях и платформах. Тупо смещение в кодогенераторе глючило. Причем тип написан в делфи, и из делфи без проблем юзается под всеми версиями и битностью. А вот использование этого типа в билдере принесло "сюрпрайзы"
12 май 18, 01:32    [21404477]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Delphi Ответить