Problème de synchronisation
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.
Code:
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
}
} |
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:
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);
} |
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.
En effet j'ai voulu utiliser TIdThread.Synchronize mais il ne veux pas compiler cette ligne.
Code:
1 2
|
TIdThread::Synchronize((TThreadMethod)&updateListe(rep)); |
Voici l'erreur E2109 Ce n'est pas un type autorisé
Une idée?