Size: a a a

2020 February 25

N

Nik in Delphi & Lazarus
В FireDAC поведение при ошибках настраивается
источник

GB

George Bakhtadze in Delphi & Lazarus
Alexey Shumkin
это - для удобства пользователя
ну, удобство это хорошо, но надо оценивать в комплексе. у каждой фичи есть цена и она может оказаться слишком большой. не думаю, что оракле не сделали этого, потому что не смогли.
источник

N

Nik in Delphi & Lazarus
У ms sql, кроме Report Services, других плюсов не увидел пока что
источник

GB

George Bakhtadze in Delphi & Lazarus
вопрос по женерикам:
 
TTest1 = class
 end;

 TTest2<S: TTest1> = class
 public
   f: S;
   function test(): Integer; inline;
 end;
...
procedure TTest2<S>.test();
begin
 F := TTest1.Create(); // Error:(25, -1) DELPHI: Incompatible types: 'S' and 'TTest1'
end;
это что оно имеет в виду?? :)
источник

GB

George Bakhtadze in Delphi & Lazarus
это Delphi 10.3 если че, FPC все норм
источник

VA

Viktor Akselrod in Delphi & Lazarus
George Bakhtadze
вопрос по женерикам:
 
TTest1 = class
 end;

 TTest2<S: TTest1> = class
 public
   f: S;
   function test(): Integer; inline;
 end;
...
procedure TTest2<S>.test();
begin
 F := TTest1.Create(); // Error:(25, -1) DELPHI: Incompatible types: 'S' and 'TTest1'
end;
это что оно имеет в виду?? :)
видимо не может толком разрулить типы

F := TTest1.Create() as S;
источник

GB

George Bakhtadze in Delphi & Lazarus
Viktor Akselrod
видимо не может толком разрулить типы

F := TTest1.Create() as S;
шо тут разруливать? это самый банальный случай :)
источник

VA

Viktor Akselrod in Delphi & Lazarus
а вообще есть смысл в таком коде? ведь явно подразумевается, что будут наследники TTest1 создаваться, а не сам TTest1
источник

GB

George Bakhtadze in Delphi & Lazarus
Viktor Akselrod
а вообще есть смысл в таком коде? ведь явно подразумевается, что будут наследники TTest1 создаваться, а не сам TTest1
а какая разница? и экземпляры самого базового класса тоже будут использоваться
источник

GB

George Bakhtadze in Delphi & Lazarus
с наследниками та же петрушка
источник

VA

Viktor Akselrod in Delphi & Lazarus
George Bakhtadze
а какая разница? и экземпляры самого базового класса тоже будут использоваться
я не оправдываю компилятор. но напрашивается вариант

 TTest2<S: TTest1, constructor> = class
 public
   f: S;
   function test(): Integer; inline;
 end;

function TTest2<S>.test: Integer;
begin
 F := S.Create;
end;
источник

GB

George Bakhtadze in Delphi & Lazarus
Viktor Akselrod
я не оправдываю компилятор. но напрашивается вариант

 TTest2<S: TTest1, constructor> = class
 public
   f: S;
   function test(): Integer; inline;
 end;

function TTest2<S>.test: Integer;
begin
 F := S.Create;
end;
вариант, спасибо
источник

VA

Viktor Akselrod in Delphi & Lazarus
👌
источник

SB

Sergey Bodrov in Delphi & Lazarus
Не повторяйте моих ошибок, не меняйте TThread.Suspended внутри THread.Execute(). Оно работает не всегда не везде и и не так как надо. Лучше вызывать Sleep(1) если не надо ничего делать.
источник

VA

Viktor Akselrod in Delphi & Lazarus
Sergey Bodrov
Не повторяйте моих ошибок, не меняйте TThread.Suspended внутри THread.Execute(). Оно работает не всегда не везде и и не так как надо. Лучше вызывать Sleep(1) если не надо ничего делать.
он давно уже deprecated.
для приостановки есть WairFor..
ну и в целом заморозка потока из него же выглядит как минимум странно
источник

SB

Sergey Bodrov in Delphi & Lazarus
deprecated метод Suspend(), но не свойство Suspended.
источник

VA

Viktor Akselrod in Delphi & Lazarus
Sergey Bodrov
deprecated метод Suspend(), но не свойство Suspended.
загляни в сеттер
источник

DB

Dmitry Belkevich in Delphi & Lazarus
само по себе интересно как связаны Suspended и Sleep(1) :)
источник

SB

Sergey Bodrov in Delphi & Lazarus
WaitFor тоже рискованно, вдруг сигнал/семафор не сработает, поток будет висеть. Внутри DLL initialization такое запросто.
источник

AS

Alexey Shumkin in Delphi & Lazarus
Sergey Bodrov
Не повторяйте моих ошибок, не меняйте TThread.Suspended внутри THread.Execute(). Оно работает не всегда не везде и и не так как надо. Лучше вызывать Sleep(1) если не надо ничего делать.
менять TThread.Suspended внутри THread.Execute()
даже в голову не пришло бы ))))
зачем?
источник