Bonjour,

Récemment j'ai trouvé un bug dans mon application FMX en utilisant des Threads (erreur de segmentation(11)).

J'avais pris pour habitude de créer mes objets en utilisant .Create(Self) mais de temps en temps, ça plante .

J'ai modifié la création de mes objets avec .Create(Nil) et depuis je n'ai plus ce problème!

Exemple de fonction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
procedure TData.GetPlanning(DateProd : String;T : TVirtualTable);
Begin
  tthread.CreateAnonymousThread(
  procedure
  var
      Client   : TRestClient;
      table    : TVirtualTable;
      Request  : TRestRequest;
      Response : TRestResponse;
      Adapter : TRestResponseDataSetAdapter;
  begin
  Table := TVirtualTable.Create(Nil);
  Table.Open;
  T.Clear;
  Client   := TRestClient.Create(Nil);
  Request  := TRestRequest.Create(Nil);
  Adapter := TRestResponseDataSetAdapter.Create(Nil);
  Response := TRestResponse.Create(Nil);
  Adapter.Response := Response;
  Adapter.Dataset := Table;
  Request.Client := Client;
  REquest.Response := Response;
  Client.BaseURL := BASE_URL2;
  Client.AddParameter('action','get_planning_bis');
  Client.AddParameter('date_prod',DateProd);
  Request.Execute;
  tthread.Synchronize(nil,
  procedure
  begin
    if Not Table.IsEmpty then
    Begin
      T.Assign(Table);
      T.FieldByName('id').Visible := False;
      T.FieldByName('decouverte').Visible := False;
    End;
  End);
  end).Start;
End;
J'ai pu lire dans un autre post que Create(Self) sers à gérer la destruction des composants à la destruction du Owner, mais je ne vois pas pourquoi dans mon cas cela a une incidence...?