Discussions au sujet des autres produits NI

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

What the difference between "Run in UI Thread"; and "Run in any thread" ?

Hi! 

 

I'm using LabVIEW Real-Time 8.5.1 and GEFanuc Arinc429 has a third party product. When you configure the Call Library function node; under the title "Thread" under the "Function" tab you can select between to mode: "Run in UI thread" and "Run in any thread" What's the different between these two mode? I know that the last one allowed the library function to be call in different thread at the same time.

In my application I'm using 3 differents function name in the library that are call in 3 differents thread and only one function name is call by thread. I notice a major gain in performance by selecting the "Run in any thread" mode. My application is much faster! Can you explain to me, why even if the same function name in the Library is not call in more than one thread, I still see a remarkable improvement by selecting "Run in any thread"?

 

J.-P. 

0 Compliments
Message 1 sur 6
4 266 Visites

Salut à toi,

 

Une question intéressante, mais pas évidente à répondre... En tout cas, je n'ai pas de réponse toute faite à ta question.

 

Jette quand même un oeil à cette base de connaissance: How many threads does LabVIEW allocate?

Il est y est écrit: "This thread - UI thread - is also used for certain types of VI execution, such as attribute nodes, thread-unsafe CINs and DLLs, etc."

 

Dans certains cas, la même DLL peut être appelée en paralèlle par plusieurs parties d'un programme. Si elle est multithread safe, pas de soucis, et dans ce cas, tu peux selon moi la faire s'éxécuter dans n'importe quel thread. Si elle ne l'est pas, elle doit tourner dans UI thread. Certainement une question d'espace mémoire dupliqué dans le cas d'une DLL multithreadsafe et pas dans l'autre cas.

 

Quelqu'un confirme que je dis pas des bêtises plus grosses que moi ?

A+

 

P.S: un autre lien ici (aide LV)

Message Edited by Mathieu Steiner on 06-15-2009 05:46 PM
0 Compliments
Message 2 sur 6
4 240 Visites

Bonjour Mathieu,

 

Merci pour ta réponse. Jusqu'à maintenant NI me conseil de ne pas utiliser "Run in any thread" si ma DLL n'est pas safe (comme tu le dis si bien) J'ai un paramêtre que je dois setter pour rendre ma DLL Safe. C'est la fonction 

 "AR_Set_Multithread_Protect"

 

Cependant GE Fanuc me déconseil de l'utiliser voici la note: "When enabled, thread protection may result in thread priority inversion. Exercise extreme caution when considering use of thread protection or when applications with multiple threads access shared hardware resources."

 

En effet lorsque je l'utilise, mon n'application fontionne tout croche.

 

En conclusion, je ne peux pas mettre ma DLL safe et je ne peux pas utiliser "Run in any thread" selon NI. "Run in UI Thread" ne fonctionne pas du tout et beaucoup de data sont perdu tandis qu'avec "Run in any thread" tout semble être parfait

 

Merci pour ta réponse

Jean-Philippe 

0 Compliments
Message 3 sur 6
4 229 Visites

Bonjour,

 

Lorsqu'une DLL est safe, c'est qu'elle ne peut pas etre appellé dans plusieur thread. Même si le programme est multithread, c'est le cas de LabView, la DLL ne sera executé que dans un seul et unique thread. Cela permet d'eviter les erreurs lorsque l'on accède à du harware.

C'est pourquoi il est vivement conseillé d'utiliser "Run in UI thread" lorsque la DLL est critique et "Run in any thread" lorsque vous pouvez appeller de multiple instance de votre DLL.

 

Un lien sur msdn: Designing Thread-Safe DLLs

 

 

Cordialement,

Message Edité par ajangot le 06-16-2009 02:19 AM
0 Compliments
Message 4 sur 6
4 217 Visites

Jean-Philippe,

 

Après discussion avec un ancien collègue qui s'est frotté de près aux appels de DLLs sous LVRT, ce que j'ai dit est vrai en windows, mais pas en RT.D'après lui, le UI thread n'existerait plus après création d'un executable RT...

 

J'ai cherché un peu plus d'infos sur la question, sans trouver. Si jamais il passe par là, il pourra peut être nous éclairer Smiley très heureux

 

A+

0 Compliments
Message 5 sur 6
4 198 Visites

Bonjour!

 

 

Le UI thread n'existerait plus après création d'un executable RT...? Je peux te dire qu'il y a une différence entre le UI thread et le "Run in any thread", avec "Run in UI Thread" mon application prends beaucoup plus de temps pour faire toute ces opérations et je rate quelques acquisition Arinc. Ce que je n'ai pas avec "Run in any thread" Avec "Run in UI Thread" le processeur ne fait rien d'autre à l'appel à la DLL jusqu'à temps que celle-ci soit terminé d'être exécuté, tandis qu'avec "Run in any thread" Le processeur peux aller faire d'autre tâche.

 

A+

J.-P

0 Compliments
Message 6 sur 6
4 189 Visites