TestStand Multithreading

I have created a project in CVI to control my application (apps.dll & apps.lib) which in turn calls the third party comport drivers(comport.dll). I need to run this application in the TestStand with 8 threads in parallel. My question is when I do the multithreading in the TestStand I will be calling the apps.dll functions which in turn calls comport.dll.
Can I run it just like that in the TestStand? Will the TestStand create the distinct application space for each thread?
Thank you,
Hiren
Hiren Patel

It isn't completely clear what you are asking. If you are asking if TestStand threads are actually separate operating system processes, the answer is no. They are standard operating system threads that exist within the same process.
One thing to note is that if you use the LabWindow/CVI adapter to call a code module and you have the Configure>>Adapters>>LabWindows/CVI Configuration>>Execute Steps in an External Instance of CVI option checked, then the CVI code you call runs in a separate process CVI process (to facilitate debugging), no matter what TestStand thread calls it. If it is important that this does not happen, make sure this option is not selected.

Similar Messages

  • Using multi threading to access 2 RS232 ports

    Hi,
    I'm a beginner in multi threading, so this question may be a very basic one....
    I'm Using TS3.5 + CVI 8.01 to communicate withs 2 RS232 ports.  I thought to use mult threading so I can process 2 steps in parallel rather than in series. 
    This is what I do:
    1) I defined 2 subsequences, each of them call the same CVI function.  I use the sub sequence parameters to transfer the com number.
    2) My CVI application includes one dll for this specific project and another one, a general dll to handle RS232 functions.  The RS232 dll uses one global buffer than collects all the traffic on the com. 
    QUESTIONS:
    1) What happens when 2 seperate threads run the same function in the RS232 dll?  (in terms of memory etc...).  Does each one use a different buffer (in terms of memory allocation), or, both of them writes to the same buffer?   Obviously, if they writes to the same buffer, then, my function will not operate properly.
    2) What happens in TestStand after the 2 steps in new threads have finished their execution?  does the next step run back in the same threads the sequence run before?
    Thanks
    Rafi

    Rafi,
    Glad to hear you were able to make some ground on your application. As for all of your questions, I'll try to answer as many as I can.
    First, when you are talking about your global buffer, is it created in TestStand or in the DLL itself? When you use DLLs, global variables or global structures are shared between all threads that call your DLL. On the other hand, if your buffer is declared inside of the DLL it is global for the DLL but not shared and would be a separate buffer for each call.
    With your run-time error in TS, it would definitely be helpful to have more information about the error. From what you explained (executing fine on the first call, but failing on future executions), it sounds like the resource is not being released after the first execution.
    As far as a specific example for TestStand Multithreading, you'll want to look at the TestStand Development Library and, specifically, Multithreading in TestStand. If you look and browse through the Application Notes and Tutorials section, as well as the Technical Presentations section, you will learn a great deal about multithreading and what options you have in TestStand. For a specific example, you may want to look at This Example. You could also look in the <TestStand>\Examples (where <TestStand> is the directory where TS is installed) at the MultiUUT example for an example of multithreading in TS. These examples may not be exactly what you need, but they should give you a jump start.
    As far as making your DLL multithread safe, it is definitely not necessary; however, there are some significant advantages described in this article: Designing Thread-Safe DLLs. It is an MSDN article that focuses on Visual Basic, but it has some helpful information that can apply to C as well.
    Hopefully this can help you move further. I have attached a list of links at the end of this post with other helpful links for you as well. Keep us posted with your progress.
    Matt Mueller
    NI
    Links:
    General Information on Multithreading for C Programmers
    Building Multithreading Applications with LabWindows/CVI
    Multithreading in LabWindows/CVI
    Easy Multithreading Programming in LabWindows/CVI
    Multithreading for Rookies

  • Multithreading in TestStand

    Does TestStand lock accesses to data structures (like StationGlobals or FileGlobals) such that it is safe to read and write them from
    sequences running in different threads
    threads started within test steps using the TestStand API
    or do I have to take care of these locks myself?

    TestStand locks access to individual data items. So if you write :
        StationGlobals.CurrentChannelName = "Chassis3:Channel4"
    there is no chance of another thread reading an invalid intermediate state of the string value if it tries to read StationGlobals.CurrentChannelName during the write.
    However if you write:
        StationGlobals.CurrentChannelName = "Chassis3:Channel4"
        StationGlobals.CurrentVoltage = 50
    and another thread reads both values, then the other thread might read both values while the first thread is in between setting the first and second value.  So if you have groups of values that must change "atomically", you need to lock access to them. You can use any locks you want, including the ones TestStand provides, just as long as you use them consistently.

  • How can I pass arguments to a TestStand sequence with LabWindows 6 ?

    Hi
    I have created sequences in a TestStand file.
    I want to program a sequence with Labwindows 6 which would call all these existing sequences (containing parameters).
    I don't have any problems to create the steps "SequenceCall" but i don't know how to pass arguments to the sequences with the TS API.
    I have used the look-up strings "TS.SData.SFPath", "TS.SData.SeqName", "TS.SData.ThreadOpt" to program the sequence file / sequence and the multithread option. But now how to program the arguments passing ? I think there is something with the lookup string "ST.SData.ActualArgs"...
    Thank u very much for any help

    I'm not sure if you want to pass values from TestStand to LabWindows or if you want to pass values in TestStand from a sequence call step to a called sequence.
    To get TestStand variables from LabWIndows, use the following function:
    tsErrChk (TS_PropertyGetValNumber(testData->seqContextCVI, &errorInfo, "Locals.StartPoint", 0, &dStartPt));
    iStartPt = (int)dStartPt;
    The TS_PropertyGetValNumber gets the TestStand variable Locals.StartPoint and puts it into the LabWindows variable called dStartPoint. Numbers to and from Test Stand are always a double type. The next line converts it to an integer.
    To put a LabWindows value to TestStand, use TS_PropertyPutValNumber.
    To pass values from a sequence call step to a called sequence, create variables in the Parameters t
    ab on your main sequence. Create same variables on the Parameters tab of the called sequence. In main, specify module to be called in calling step. There is a paramters section on the Edit Sequence Call dialog box which appears. Check the Use Prototype of the Selected Sequence box. You can then list all the parameter variables in the parameters section.
    Hope this is what you want.
    - tbob
    Inventor of the WORM Global

  • CVI UI Panel updating from TestStand

    I'm experimenting with using a CVI graph strip chart in TestStand(4.0).   I'm new to threading in TestStand. I would like to do two simple things at first:
    1.Load the CVI UI graph panel
    2. Update the graph attributes.
    Attached is a solution that uses a separate thread for running the CVI GUI and the main thread for updating the title,axis names and data . For some reason, I seem have to have a generic wait to allow the separate thread to update the seqcontext (FileGlobals being updated in TS). If I don't wait, the FileGlobals have not been updated yet, so the UpdateGraph function fails.
    Is there anything besides a blanket wait statement that I can use to know when the separate thread has updated the FileGlobals so that I can continue with my UpdateGraph function? I thought about a loop/timeout function, but I thought maybe there was some other thread/synch mechanism that I missed.
    Attachments:
    CVIGraph.zip ‏1191 KB
    GraphTest.seq ‏7 KB

    Hey jsmalley,
    A Wait step is definitely a good and simple solution to your challenge, however, you could also try taking a look at some of the other TestStand Synchronization steps, which are often used when multithreading.  Documentation on these steps can be found on your machine by browsing to Start»Programs»National Instruments»TestStand»Online Help»Manuals»TestStand Reference Manual.  The documentation I'm referring to can be found in Appendix B of this document.
    Furthermore, there should be some synchronization examples found on your machine at <TestStand>\Examples\Synchronization.
    I hope this helps!
    Derrick S.
    Product Manager
    NI DIAdem
    National Instruments

  • TestStand 4.1 threading bugs

    Hi, all,
    I'm starting a thread in TestStand at the setup of a test to monitor messages arriving at an RS-232 input port as the test progresses. This is causing some bad behavior in TestStand:
    When a breakpoint in the main sequence is hit, the Variables tab is empty. (if I disable the start of the thread, it shows up fine.)
    Only the Main Sequence thread shows up in the threads list.
    If there is an error in the main sequence, TestStand locks up while trying to display a popup. (A workaround is to select Configure->Station Options->Execution->On Run-Time Error: Run Cleanup, but the default option is "Show Dialog," and it had us floored for a while.)
    The problems persist if I start the thread in the main sequence rather than the setup.
    These are fairly serious problems, IMHO.
    Is there something I can set, patch, or otherwise fix to get past these problems?
    Thanks,
    - Steve.
    Message Edited by SPM on 06-17-2008 09:36 AM
    Message Edited by SPM on 06-17-2008 09:38 AM

    Hello Steve,
    In TestStand, you can't use the debugging tools for a multithreaded
    application unless all threads are suspended, as desribed here.  So, if
    you RS-232 sequence is still running, then the debugging tools will not
    be available to you in your main sequence when a breakpoint is hit. 
    This is most likely why your variables are not populated once you hit
    the breakpoint.
    I am a little puzzled the error popup would lock up, however.  Are you
    doing any UI work in your RS-232 sequence?  What kind of code modules
    are you calling?  It could be that this RS-232 thread needs to "Use
    Single-threaded Apartment" under the sequence call options.
    Can you reproduce this issue without communicating with any hardware? 
    I would recommend setting all the RS-232 steps to Run Mode -> Skip
    and see if you still experience this problem.
    Regards,
    Marty H.
    National Instruments

  • Can I use NI TestStand for testing ZigBee and Bluetooth transceivers and processors

    Hi , I should create , maintain snd excute  software test plans for testing low power wireless networks such as ZigBee, Bluetooth  using Python scripts and QA Methodology .The test design includes testing 
     RF transceivers, RF transmitters, RF receivers, System-on-Chips, Front Ends, ZigBee Processors, Bluetooth LE Processors, and RFID reader
    I am a LabVIEW Developer and familiar with testing RF Components using NI Hardware such as PXIe system but I am new to TestStand and Python. Can I use Teststand to develop and deploy the tests for this purpose and also LabVIEW instead of Python
    If it is possible could you please let me know that are the advantage and disadvantage of using LabVIEW and NI Test Stand for these kind of test design and implementation.
    I greatly appercaite your help and advice on this matter .Many thanks.

    Hi en99,
    I am unsure what you mean by usign LabVIEW instead of Python - what part of the system would LabVIEW replace? Usually if you were using Python in automated test, it would be to handle the test processing, which in this case is done by TestStand.
    As for advantages of TestStand over LabVIEW, the main one which SunRS mentioned is that TestStand has a test management engine, which covers result logging and passing test parameters to the various test modules, which can be written in many languages. As I mentioned above, it is Python which is commonly used to write alternative test managament engines. It is possible to write one in LabVIEW, but for good results it must be carefully architected and is typically a very time-consuming task if you want to keep it modular and use it for other applications. TestStand also has a number of built in tools which help to monitor various aspects of the test sequences, as well as provide multithreading optimisations.
    I hope this helps 

  • What is the best method to manage a digital I/O board from TestStand?

    Hello,
    I'm a beginner with TestStand (3.5).
    I want to create some Step types in CVI to write/read to a digital I/O board (PCI6509).
    What is the best way to do this?
    I don't know if it is better to build 2 big groups (i.e 48 input / 48output) and read/write all simultaneeusly or drive the lines one by one.
    I would like to create a reusable code, also for multithreading.
    Any help will be appreciated
    Thanks
    baloss

    Hi Baloss,
    in the general point of view there is no "best" method to do this. Again, there are advantages in both ways - it is depending on the Test you want to do.
    I would not recommend to create Tasks and do all the writing and reading in different steps. Sure it might be faster if you are able to get it work, but to get in work it will take a bit of effort. The Task Reference is not Global, so if you pass the Reference to TS and unload the VI from Memory, your Reference will not be valid anymore. If your using Multithreading in some ways you must handle the Resscource so that the Hardware is not blocked by another Task. You see it will be tricky.
    I would recommend to write down, what Tests has to be done. Than you can define steps which are as general as possible. So if you want to read a line in one test and 5 lines in another, it could be a could idea to define a step in which you read a hole port into a array and depending on a input array with a "wanted line pattern" you can pass the results of 1 , 2 or more lines needed to TS.
    You have one step in which you can perform every read request depending on a input from TS.
    The Step will be self-contained and reusable and you can create a Report with the Read-Results.
    The same way I would recommend for Write Operations. All with focusing on the Test Results you want to get.
    I really hope that helps a bit.
    Stefan
    NIG

  • Message Popup crashes TestStand

    Hello,
    Our sequence executes under TestStand 3.5 ; steps call dlls written with LabWindows/CVI 7.1.1.
    Everything is going fine except some calls to the "Message Popup" step
    of TestStand : sometimes TestStand crashes on such calls (we have to
    stop it from Windows Task Manager). We have several "Message Popup" to
    display during the sequence execution and we have noticed that the
    application does not systematically crash on the same Message Popup
    step.
    The target computer is a PIV 3.2 HT with 1Gb RAM.
    Does anybody have the same problem ?

    Hi,
    We have installed CVI8.0.0.273 runtime engine and we still have crashes on some Message Popups in SeqEdit.
    Here is a short description of the system : we have a PXI 1000B chassis connected to the computer with a PCI and a PXI MXI-3 (software v1.15).
    PXI cards : 2 PXI CAN 8461/2 (one dedicated to DiagOnCAN and the other one for CAN), 1 PXI 6070E, 1 PXI 6713, 1 PXI 6704, 1 PXI GPIB. We also have 2 PCI cards : Addi-Data APCI 2032 which drive the relays of the system. We have installed DAQ-mx 8.0 (DAQ 7.4.0 is also used on the system for an other application, not with TestStand), NI-488.2 2.43 and NI-CAN 2.3.2.
    Our application is multithreaded (3 threads + 1 main thread).
    We have tried several solutions not to use the step "MessagePopup" of TestStand : we have created a specific step calling a CVI dll. In this dll we call the CVI MessagePopup function, but TestStand still crashes. Next we have tried to display a panel (created in a uir file) instead of the Popup but the problem is not solved (we tried several combinations of panel attributes).
    In Windows TaskManager we see that the PIV 3.2GHz HT is never overloaded (CPU load = about 90%) and that there is enough memory available on the system.
    If we try to run a sequence that creates 3 threads which process nothing (infinite loops), with no signals / CAN / instruments processing, we can't reproduce the crash caused by the Popups.
    Do you have any suggestion about that ?

  • Timers Multithread sous CVI

    Bonjour,
    J'ai plusieurs questions concernant mon programme avec LabWindows CVI 9.0 et 4 cartes NI PCI 6229, sous Windows XP et dual core Intel 3GHz.
    Je souhaite réaliser un programme qui réalise une boucle d’asservissement et également un contrôle et affichage sur des acquisitions. Je n’ai malheureusement pas le choix sur l’OS et je ne peux pas m’orienter sur une solution temps réel.
    Pour cela, je souhaite réaliser
    -          une boucle qui gère l’asservissement (acquisition sur 20 entrées, calcul sur ces acquisitions, et génération sur 10 sorties, tout ceci en 10ms, c’est la BOUCLE CRITIQUE)
    -          une boucle pour le contrôle (simple contrôle sur ces acquisitions: comparaison à une valeur seuil, 10ms)
    -          une boucle pour l’affichage (affichage des résultats sur la face avant des contrôles OK ou non OK, toutes les 200ms)
    Je souhaitais à la base utiliser 3 timers asynchrones de CVI, mais je me suis aperçu qu’on ne pouvait utiliser qu’un seul Timer asynchrone à la fois.
    J’ai donc vu qu’il y avait une autre solution, le multithread en utilisant les thread pool. Cette solution m’intéresse, car je souhaiterai mettre la boucle critique dans 1 thread sur le 1er coeur, la boucle de contrôle dans un 2ème thread sur le 2ème coeur, et la boucle d’affichage dans un 3ème thread sur le 2ème coeur.
    La boucle d’asservissement est la boucle critique et doit être de 10ms à +/- 2ms.
    Les autres bouclent ne sont pas critiques et peuvent avoir un décalage de +/- 10ms, le but est de ne pas perdre de données et de contrôler toutes les acquisitions. Un affichage toute les 200ms suffit.
    Voilà j’ai alors 2 questions :
    -          est-ce que mon approche (timers en multithread et diviser sur les 2 cœurs) convient pour mon application ?
    -          et comment mettre un timer classique dans un thread spécifique ? J’ai vu qu’il fallait utiliser «CmtScheduleThreadPoolFunction (int Pool_Handle, ThreadFunctionPtr Thread_Function, void *Thread_Function_Data, int *Thread_Function_ID)” Mais cette fonction appelle une fonction de type “CVICALLBACK FonctionThread(void *functionData)” et mon timer classique est de type “CVICALLBACK Timer_Classique (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)” Comment donc appeler un timer classique avec une fonction CmtScheduleThreadPoolFunction ? Faut-il procéder d’une autre manière ?
    Je vous remercie de votre aide.
    Cordialement,
    Hédi.

    Bonjour,
    L'approche multi-thread est en effet la bonne, dès qu'il faut séparer plusieurs tâches. Je vous invite à consulter cet article du Rebel Site, qui traite du multithread et constitue une référence en la matière. Attention, le multithread n'implique pas obligatoirement une gestion multicoeur. Il faut pour le mettre en oeuvre passer par l'API de Windows.
    Est-il bien nécessaire de faire de du contrôle 10ms? (deuxième boucle) Au quel cas, je ne suis pas absolument sûr qu'il faille créer un thread séparé. Si cette tâche peut supporter un cadencement plus lent, il serait plus malin de venir la traiter dans le troisième thread.
    Il serait intéressant d'utiliser une Thread Safe Queue pour faire circuler les données d'un thread à l'autre. Ce mécanisme permettra de ne pas perdre de données. D'autre part, vous pouvez alors installer une callback sur un nombre d'éléments dans la TSQ (Thread Safe Queue) et venir déclencher la callback associée à cette TSQ dès que 20 éléments sont présents pour piloter le troisième thread depuis le premier.
    Dans cette configuration, il n'y a plus besoin que d'un timer, pour la partie temps critique - bien que sous Windows, on ne puisse pas garantir le déterminisme d'une boucle à 10ms - les autres thread étant 'esclave' du premier.
    Cordialement,
    .mrLeft{float:left} .mrInfo{border-left:solid 1px #989898;font-size:x-small;color:#989898}
    Mathieu R.  
      CTD - Certified TestStand Developer / Développeur TestStand Certifié  
      CLAD - Certified LabVIEW Associate Developer  

  • TestStand (Shared Object) in show step in variable tab.

    After selecting show step in variable context (tab) during execution, expanding the selected step I see the following, (plus more):  
    +TS (Shared Object)                              Step Type TEinf (Container)
    What does (Shared Object) mean? I posted previously about changing "InBuff" values on the fly. But something has happened to prevent this and I can't figure out what it is but, I think this shared object property has something to do with it.
    From a TestStand surface scatcher.
    thanks

    Shared object means that all of the properties underneath and including that object really just point back to the original version of the properties. In the case of TS, this means they all point back to the edit time version of the step. Changing the properties under TS at runtime is generally something you should avoid doing because you will be editing the actual edit time version of the step. This also has multithreading consequences because shared properties could potentially be accessed by more than one thread at the same time, thus if one thread is modifying them while another thread is accessing them, you can get unpredictable results. The properties under TS are meant to be read-only at runtime.
    Hope this helps explain things,
    -Doug

  • Multithread Voltage/Current Check using 2sets of DMM

    Hi..
    I need some fresh idea on how to solve my problems. I've been using Labview for about 3years now.
    Currently I'm trying to modify my current VI for multithread check. Last time my VI can read from only one Digital Multimeter (DMM) and now i want it to be able to read from 2 sets of DMM so that the process can run in parallel & execution become faster. Have any experts out there tried this method before. Some suggest me to put the block diagram in parallel so that the data can be execute at the same time. Is this true?
    I've read through all the thread but can't found the answer I'm looking for. There are suggestions from others to use TestStand but I'm not familiar on how to use them. Plus I don't want to make big modifications on my current hardware designs.
    Attached together is sample of my current VI using only 1DMM. I welcome all to give any suggestion and opinion for easy way to perform multithread check for my case. I'm using Labview 8.5 so please let me know if you can't open them.
    Thanks and Regards,
    Allen
    Test Equipment Engineer
    Sony Corp.
    Attachments:
    display details.vi ‏64 KB
    Single_DMM_Display.vi ‏31 KB
    New_2DMM_Display.vi ‏41 KB

    To Kate & Dennis,
    Sorry for the trouble. I forgot to remove the password. You may unlock using this password "mepowerrr'. Can you guys give me suggestion based on my current block diagram.
    Btw, I connect to DMM using USB and GPIB through VISA. I control the DMM by creating an instrument file within my application. The instrument file is different for each DMM. Try to make my program suitable for all type of DMM (Agilent, Tectronics & Fluke). Now I just worried thinking if its possible to do multithread check on my application.
    Is there an easy to do this?

  • Using ActiveX controls in GUI application, which uses TestStand API

    When using ActiveX controls in TestStand Operator Interface GUI,
    CVI reports User Interface Library error no.-143:
    "ActiveX control Error" on attempt to load panel, which contains ActiveX controls.
    The same code, which takes care of user interface, but not references
    TestStand ActiveX API (i.e. not creates TS Engine), works properly.
    What's wrong?

    Hello again Misha,
    Sorry about my previous answer, I overlooked the fact that you were saying this error was caused by placing ActiveX controls in your Operator Interface (OI) GUI (as my example shows I thought the problem was with GUIs displayed from step code modules).
    Nevertheless, the problem is still being caused by the same issue, and is solved in a similar fashion. The source for the CVI OI initializes the TestStand engine before it loads/displays the UI panels. The calls to initialize the engine seem to be CoInitializing the main GUI thread as multithreaded apartment (MTA) mode whereas you will need it to be single threaded apartment (STA) mode in order for the ActiveX control container to work properly. The TestStand engine is compatible with either modes, but only one can be in place at a given time. If we CoInitialize the OI's main GUI thread as STA this will solve the problem (the subsequent attempts of setting it to MTA will fail, but again this is ok since the engine is compatible with STA).
    In order to perform this functionality you will need to put a call to CoInitializeEx in the main function of the CVI OI source (this will also require that you #include the "windows.h" file at the top of the source also). Here is what the main function in your main.c file for the CVI OI will look like once you have done this:
    int main(int argc, char **argv)
    int retval = -1;
    sArgc = argc;
    sArgv = argv;
    if(InitCVIRTE(0, argv, 0) == 0) /* Initialize CVI libraries */
    goto Done; /* out of memory */
    // Intialize main GUI thread as STA to prevent other attempt to make it
    // MTA, which will not allow ActiveX controls to be used.
    CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
    /* initialize the test engine */
    if(!InitEngine())
    goto Done;
    if(!InitErrorDialogStrings())
    goto Done;
    if(!InStandaloneExecutable() && !DisplayRunningInEnvironmentWarning())
    goto Done; // get out now
    if(!ProcessPreLoginCmdlineArgs())
    goto Done;
    if(!CfgFile_Load())
    goto Done;
    if(!CfgFile_RestoreOptionSettings())
    goto Done;
    if(LoadGUIPanels() < 0)
    goto Done;
    if(!InitFileQuickList())
    goto Done;
    /* set initial gui state */
    if(!InitGUI())
    goto Done;
    RunUserInterface();
    retval = 0; /* normal exist status */
    Done:
    /* cleanup */
    SeqFileList_DeleteAllSequenceFileRecords();
    ExeList_DeleteAllRecords();
    IconList_DeleteIconList();
    SaveAndCleanupFileQuickList();
    CfgFile_SaveOptionSettings();
    CfgFile_WriteAndCleanupForExit();
    AdaptList_DeleteAdapterList();
    DestroyToolMenus();
    CloseEngine();
    FreeErrorDialogStrings();
    return retval;
    Note: Remember to #include "windows.h" at the very top of the main.c file and to include ole32.lib in your project file list in order to link in the definition for CoInitializeEx.
    Jason F.
    Applications Engineer
    National Instruments
    www.ni.com/ask

  • Multithreading - Keeping Data separated between threads

    I am new to multithreading. I am taking some code that was created in CVI 6.0 (as a exe.). TestStand would call the wrappers which in turned call these functions. The CVI functions has several structures which are global. Now, if I call a teststep into several threads, will the data be separated between the threads, or would they be using the same data. I am trying to understand how the data is handled within the same DLL, but different threads. Each Thread is running the same function.

    Hello James,
    When you use DLLs, global variables or global structures are shared between all threads that call your DLL. On t he other hand, variables or structures you declare inside the function scope are not shared.
    Regards,
    Roberto P.
    Applications Engineer
    National Instruments
    www.ni.com/support

  • Multithreading not waiting

    Hi All,
    Thanks for helping with resolving the issue with accessing shared resource with Locks in multithreading.  However, now I have two sequences with steps that skip the execution.
    I've been experimenting with Locks by locking the same step type in both sequence files that run in parallel. I checked the box in synchronization tab but left the Lock Name(reference expression) field empty.  In the properties window, it mentions ..leave blank to use a lock unique to the steps.
    By doing this, my multithread scripts no longer crashes the Window XP.  However, my test results are inaccurate now. I think the reason is the step type in one sequence file are not waiting for the step type in another sequence?  If it sense it's been locked( by another sequence file) it will just skip to next step?
    I want all the step types to execute but how can I make it to wait for the other step to unlock.
    Thanks again.
    ph

    Hey ph,
    I just tried this on my end and was able to get it to work properly. To clarify, what method are you using to run the two sequence files in parallel? 
    One thing I might suggest would be to try this with a very simple step, rather than a complex one--so for example, try it with a simple message popup or Wait step, to make sure that the step configuration itself isn't contributing to the issue. 
    Finally, I wasn't sure if you were saying that the lock name was exactly as follows: ("lockStepA").    If so, it's not necessary to use the parenthesis.
    Daniel E.
    TestStand Product Support Engineer
    National Instruments

Maybe you are looking for

  • Is it possible to transfer songs from a separate iTunes account into a new one?

    I have a lot of songs saved on my Dad's mac under his apple ID.  I'd like to transfer the songs I've purchased/imported on his computer onto mine.  Is this possible through possibly the iCloud?  I'd like to avoid having to burn them all to a disc or

  • Oracle Forms..  Master/Detail problem

    Hi,.. I have a problem.. I have 2 blocks in a page. One is an single row block and the other one an multirow block.. master/detail relationship. I would like that when I change a specifike item in the master block, a column of a specifike record gets

  • Black box highlighting everywhere I click

    I came home from work today and found that when I click icons on the desk top there is a black box outlining the icon. It also happens when I'm in safari. When ever I click in a text box a black outline highlights around the text box I'm typing in. M

  • Change search help values

    In the standard transaction S_AHR_61003917 when i go for create qualifiactions it displays a list of qualifications in a structured manner.I want the qualification under each qualification group to be sorted alphabeticaly instead of the existing sort

  • IMovie 7.1.4 project can't find clip! exclamation points everywhere!

    My iMovie 7.1.4 project can't find clip! exclamation points everywhere! I think I may have changed the name of the clip, since (long story) I had exported the finished version and thought I was done.. but that had to be deleted to make room for somet