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 :
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...?
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;
Partager