11-02-2009 07:30 AM
Bonjour,
Comment CVI gère des appels successifs à un même thread si celui-ci n'a pas le temps de se terminer entre 2 appels? Dans mon soft, je dois acquerir les data de 8 bancs identiques toutes les 500ms à partir d'un chassis PXI.
mon probleme est le temps consommé pour envoyer des commandes pour piloter 8 ventilateurs en Modbus (ie: un port COM permet de piloter les 8 ventilateurs, chaque ventilateur a une adresse differente), il faut attendre quelques dizaines de ms entre l'envoi des commandes sinon j'ai des erreurs de communication (j'utilise simplement des ComWrt() et ComRd()).
mon soft utilise un timer regle sur 500ms avec une boucle for pour acquerir sequentiellement les 8 postes. je pense utiliser la fonction CmtScheduleThreadPoolFunction(DEFAULT_THREAD_POOL_HANDLE, SetFanBridge, NULL, &FunctionId) pour ne pas perdre de temps à chaque iteration de ma boucle for où SetFanBridge sera une fonction callback pour piloter le ventilateur du poste correspondant. d'où ma question: y a t-il une erreur lors de l'execution du programme si on appelle la fonction callback " SetFanBridge" si celle-ci est en cours d'execution.
Merci,
JF
11-09-2009 06:31 AM
Bonjour,
Le problème que vous pourrez rencontrer lors de l'appel successif de votre callback dépendra de la protection des données partagées entre les threads.
Dans votre cas, le fait de partager un unique port COM pour plusieurs communications risque d'engendrer certains soucis de ressources.
Vous trouverez dans les liens suivants beaucoup d'informations sur l'utilisation du multithreading avec LabWindows/CVI:
Multithreading in LabWindows™/CVI
Building Multithreading Applications with LabWindows/CVI
Cordialement,
Olivier L. | Certified LabVIEW Developer