Bonjour
J'ai fait un serveur TCP avec le composant TidTCPServer dans une application FMX. Dans la méthode ServeurExecute je lit les données reçues et j'en affiche une partie dans une liste box.
Manifestement la fonction d'affichage ci dessous ne supporte pas d'être accédé par un thread. Car j'ai régulièrement des exceptions qui normalement n'ont pas lieu d'être
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 void __fastcall TForm1::ServeurExecute(TIdContext *AContext) { TByteDynArray pInfo; unsigned short data[32 * 25]; char chaine[256]; try { AContext->Connection->IOHandler->ReadBytes(pInfo, 1856, false); memcpy(chaine, &pInfo[0], 256); memcpy(data, &pInfo[256], 32*25*2); String rep = ""; int n = 0; while (n < 256 && chaine[n] != 0) { rep += chaine[n]; n++; }; updateListe(rep);//rafraichissement de la liste } catch (const Exception& e) { // AFAIRE } }
Pour éviter cela, j'ai vu qu'il fallait que j'utilise la méthode Synchronize mais je n'arrive pas à la mettre en oeuvre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 void __fastcall TForm1::updateListe(String rep) { lbReseau->Items->Add(rep); if (lbReseau->Items->Count > 10) lbReseau->Items->Delete(0); }
En effet j'ai voulu utiliser TIdThread.Synchronize mais il ne veux pas compiler cette ligne.
Voici l'erreur E2109 Ce n'est pas un type autorisé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 TIdThread::Synchronize((TThreadMethod)&updateListe(rep));
Une idée?
Partager