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