[Multithreading] MultiThreading et CheckSynchronize
Bonjour,
J'ai besoin de trapper l'événement PortCharReceive de la classe TComPort et pour faire cela j'utilise la fonction CheckSynchronize depuis le thread principal.
J'essaye de faire la même chose depuis un autre thread et j'ai une erreur comme quoi on ne peut pas faire un CheckSynchronize depuis un autre thread que le thread principal.
Est ce que c'est par hasard possible d'appeler cette fonction depuis un autre thread que le thread principal ? (D'aprés ce que j'ai vu c'est pas possible mais je pose la question à tout hasard)
Sinon deuxième question, est ce qu'il est possible de trapper un événement windows depuis un thread qui n'est pas le thread principal ?
Merci
Utilisation de Synchronize
Bonjour,
Alors ce que je comptais faire c'est une classe d'accés au port com appelé DeviceAccess qui serait dériver de TThread
Définition de la classe
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class DeviceAccess : public TThread
{
private:
GNModule* Module;
char* PLCFunction;
protected:
void __fastcall Execute();
void __fastcall ReadOnDevice();
public:
__fastcall DeviceAccess();
}; |
Et la fonction ReadOnDevice
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 DeviceAccess::ReadOnDevice()
{
Ecriture sur le port, avec réponse du device
while('Rien reçu sur le port com' && i<15)
{
j=0;
i++;
Application->ProcessMessages();
while(!CheckSynchronize(10) && j<5)
{
j++;
}
Sleep(100);
}
} |
Et dans la fonction Execute
Code:
1 2 3 4
| void __fastcall DeviceAccess::Execute()
{
Synchronize(&ReadOnDevice);
} |
De cette manière, si j'ai bien compris, l'écriture et la lecture sur le port com s'effectuerais depuis le thread principal. Est ce que c'est juste ?
Le problème que j'ai, c'est que je fais une DLL qui n'est pas de type VCL, j'utilise Borland Developper Studio 2006 et quand je compile, j'ai l'erreur :
[Lieur Erreur] Error: Externe '__tpdsc__ Classes::TThread' non résolu référencé par C:\Projet1\DEVICEACCESS.OBJ
J'ai essayé de faire include de VCL.h et de Classes.hpp et ça ne marche pas mieux.
Est ce que quelqu'un sait si je dois faire un include pour que ça compile ?
Merci