Correct way to pass pointers around labview

Hello,
what is the correct way to pass pointers, pointing to DLL allocated memory around labview ?
I have been for quite some time using the standard C type cast working as:
typedef struct
void *mem;
} myVars;
int InitMyVars(int64_t *myVarsLVPtr)
void *myVarsPtr = NULL;
myVarsPtr = malloc(sizeof(myVars));
if(myVarsPtr)
*myVarsLVPtr = (int64_t)myVarsPtr;
return 0;
return -1;
int UseMyVars(int64_t *myVarsLVPtr)
void *myVarsPtr = NULL;
myVarsPtr =(void*)*myVarsLVPtr;
//return funcWithVars(myVarsPtr);
Afterwards configure the library call nodes as follows:
And pass the pointer around in labview as an 64 bit number (since it is a pointer value, I think it does not make difference if its signed or unsigned, please facepalm me if wrong)
This way is very ugly. I do not like it. Found several discussions stating that "Every time someone writes a code like int tmp = (int)(&something); a little fluffy kitten chokes to death. Unfortunately, programming so far had been quite a felinicide." This makes me a serial kittenchoker.
It is also dangerous, for different platforms eg. i686 and x86_64.
I was self learning all this stuff, now looking back at it, it feels like I missed something big time.
There must be a better way.
I am thankful for suggestions.
Solved!
Go to Solution.

nathand wrote:
It would help for you to post real code, or at least consistent examples. Where in your code are you actually using the cast from pointer to integer that you are trying to avoid?
Lines 12 and 21 in the 1st post
*myVarsLVPtr = (int64_t)myVarsPtr;
myVarsPtr =(void*)*myVarsLVPtr;
 Sorry, but I cannot see how are my examples inconsistent, I only supplied one. I know it consists of 2 images and some code, but still describes the same process.
nathand wrote:
There is no need for LabVIEW to know whether a wire contains a pointer or a number - either way, it's just a number. There are many situations in which the Call Library Function Node configuration does NOT match the function prototype, but you get the correct result.
You allways have to match the function prototype, if you do not, you corrupt memory. I guess you mean, that the function prototype may be written different, as long as the datatypes and memory layout is the same.
nathand wrote:
One such situation is when the wire contains an address. In that case, even though the function prototype specificies that the parameter is a pointer, in LabVIEW you should configure that parameter to be passed BY VALUE because the value on the wire already is a pointer. Does that make sense? In your example code, you have essentially created a handle, because the myVars data type contains a pointer. Your C code can move around the memory pointed to by myVars.mem as much as it wants, so long as the pointer to myVars stays constant. I'm assuming that's what you're doing; is that correct?
If you pass a variable into DLL "by value", it does exactly what it says, it passes the value. Means, if you want to change the value going through the wire, you cant, you just get the value of it to the function stack. You can assign new value to such value inside DLL, but LabView will still keep the same value in its wire, since it only passed value. Its confusing, I know.
Imagine 1 guy thinking a number, he tells it to his neighbourgh, so they both know what the number is. But if the second guy wants to change it, he cant, ho only knows the value.
If the guy 1 passes a position of such information in his brain, guy 2 can read the number and if he modifies it, guy 1 will think of the new number. However guy 2 cannot move the position.
I am not creating a Handle by making a pointer to a pointer. First, handle can be quite anything, that is used to identify an object of some use. I know LabView calls Handles the pointers to memory pointers pointing at some LabView datatype. The value in the wire, as you correctly stated, is a place in a memory, the fact, that I pass it to DLL in a "pointer style" manner, does not mean I intend to create pointer to it, I just want to know the place in memory, where LabView keeps such value, so I am able to modify it in cases it changes (inside DLL, my DLL is guy 2 and labview is guy 1).
Pointer to a memory in heap tells the computer where the memory is. You cannot move a memory and still have the same pointer.
nathand wrote:
If so, then again, in LabVIEW you should be passing the pointer by value. I think this will avoid the dereference cast that's bothering you. As you have it now, you are adding an unnecessary extra layer of reference (LabVIEW is passing a pointer to an address, rather than the address itself), which you then need to cancel out with the cast that you don't like.
I cannot avoid type cast in LabView, since you are LabView limited. I am trying to avoid casting a pointer to integer.
There is a reason why pointer is of datatype pointer. It is platform specific, it can be flat number or something more complex, so anytime I make a number from a pointer, it is risky, I am mixing apples and bananas + the kitten chokes.
Thank you for answer.

Similar Messages

  • Correct Way to Pass Data from Main VI to Sub VI

    I'm currently working on a program that consists of a main VI which passes in several inputs to numerous copies of the same subVI which are displayed in subpanels. As you may know, in order to display a subVI in a subpanel, a reference to the subVI must be passed into the "Insert VI" property node of the subpanel. However, I am unsure as to what is the proper way in which I can generate this reference from the subVI block on the block diagram of the main VI. Note that in my case, it is insufficient to simply generate a reference to the subVI by pointing to the file path of the subVI and opening an instance of it, because that instance of the subVI must also receive input from the main VI. Generating a reference in this way does not, as far as I know, allow the main VI to interface with the subVI.
    I had thought that I developed a solution to this problem by extracting a reference to the current instance of the subVI from the "Owning VI" property node of any control or display in the subVI. This works well for about 12 hours of program execution. However, after that point, the program starts highlighting the "Insert VI" property node every time the subVI is updated. Furthermore, the main VI seems to often lose the reference to the subVI and becomes unable to start, especially after the subVI has been edited. Given these two problems, this solution clearly is not a proper solution.
    Could anybody advise on how to properly generate a reference to an instance of a subVI that receives input from a main VI?
    Any suggestions would be appreciated.

    Griffon2-6 wrote:
    I've figured that out too - set the "Option" input on the "Open VI Reference" block to 0x8.  
    Great!
    Thats the way to go. Keep digging around and you will find solutions in the LabVIEW Help or on the forums for most of the things.
    When you set the open VI reference option to 0x08, you can obtain reference to different instances of the same VI, so that you can pass different data and let them run separately.
    Griffon2-6 wrote:
    However, now I've discovered that the inputs from the main VI are not being passed to the subVI instances as the program is running. Does passing control values via invoke nodes allow for real-time data transfer?
    I have one question. You said you are calling this sub VI in a sub panel? How many subpanels do you have and why are you calling the reentrant vi in differnet sub panels?
    Could you post your code?
    (If a post helped you sove the problem, mark it as solution. That will help us identify and track the solutions for different issues.)

  • Passing pointers in Labview

    Hello All,
    I have a dll and one of the function looks like this:
    Parse_Data(BYTE* input, BYTE *result)
    where:
    -input points to a byte array filled with parameters.
    -result points to a byte array where the results will be dumped.
    Any ideea how to pass the data from parameters array to dll and how to get the results from dll and display them into an array?
    Thank you for your help.

    I would suggest using the Call Library Function Node.vi. I'm attaching a document from NI's website entitled "Using External Code in LabVIEW." I would suggest taking a look at this. It's helped me quite a bit in the past. Here are a few important things to watch out for. Initialize the array before you send it to the Call Library Function Node.vi. Also, if you are going to change the size of the array in your DLL, you need to use a CIN instead and use the appropriate CIN functions. This is all explained well in the pdf file, so this should help you out.
    J.R. Allen
    Attachments:
    Using_External_Code_in_LabVIEW.pdf ‏1805 KB

  • Proper Way To Pass Variables

    I know this is a basic question but it seems there are several different suggestions on how to do this. So using AS3 with Adobe Flash CS4, what is the correct way to pass a variable from a server side script "PHP" to my SWF?
    Thanks

    var urlLdr:URLLoader =  new URLLoader();
    var urlVar:URLVariables = new URLVariables();
    // add data to be sent
    urlVar.data1 = "whatever";
    urlReq.data=urlVar;
    urlReq.method="POST";
    // listen for data return
    urlLdr.addEventListener(Event.COMPLETE, phpCompleteF, false, 0, true);
    // call php
    urlLdr.load(new URLRequest("yourphp.php"));
    function phpCompleteF(e:Event) {
    // i'm not sure everything needs to be "typed" but, it's prudent to do so
    var vars:URLVariables=new URLVariables(URLLoader(e.currentTarget).data);
    // vars contains your return data

  • I would like to read a text file in which the decimal numbers are using dots instead of commas. Is there a way of converting this in labVIEW, or how can I get the program to enterpret the figures in the correct way?

    The program doest enterpret my figures from the text file in the correct way since the numbers contain dots instead of commas. Is there a way to fix this in labVIEW, or do I have to change the files before reading them in the program? Thanks beforehend!

    You must go in the labview option menu, you can select 'use the local
    separator' in the front side submenu (LV6i).
    If you use the "From Exponential/Fract/Eng" vi, you are able to select this
    opton (with a boolean) without changing the labview parameters.
    (sorry for my english)
    Lange Jerome
    FRANCE
    "Nina" a ecrit dans le message news:
    [email protected]..
    > I would like to read a text file in which the decimal numbers are
    > using dots instead of commas. Is there a way of converting this in
    > labVIEW, or how can I get the program to enterpret the figures in the
    > correct way?
    >
    > The program doest enterpret my figures from the text file in the
    > correct way since the numbers contain dots instea
    d of commas. Is there
    > a way to fix this in labVIEW, or do I have to change the files before
    > reading them in the program? Thanks beforehend!

  • Any way to pass Multiple Values for a single Label in the Parameter?

    I have a Report that Contains 2 Parameters, @Customer & @Area. When trying to set up the Available Values for @Area, I'm having issues using multiple values for one Label, i.e. = "4006" Or "4610"
    One of the Filters in the Report is an Operation number, which is the [OPERATION] field, which is setup as a filter on the Tablix referencing the @Area parameter. 
    PROBLEM: I cannot retrieve any data when trying to use the ‘Or’ Operator here. If I simply put “4006” or “4610” I retrieve data, but when trying to combine it returns no data.
    Example, I need to allow a user to select ‘Chassis Incoming’, which would include data from Operations 4006 & 4610.
    QUESTION:
    Any way to pass Multiple Values for a single Label in the Parameter?
    I realize the typical solution may be to use ‘Multi-Value’ selection, but in this case we want the User to select the Area and the multiple values for Filtering will be automatically determined for them. Otherwise, they are subject to not getting
    it correct.
    I have tried several different ways, such as =”4006” Or “4610”, =(“4006”, “4610”), = In(“4006”, “4610”), etc….
    Note: We are using Report Builder 3.0

    Based on my experience, there's no way to 'intercept' the query that gets passed back to SQL Server, so a Split wouldn't work.
    Try creating either a function or stored procedure using the code below (compliments to
    http://www.dotnetspider.com/resources/4680-Parse-comma-separated-string-SQL.aspx) to parse the string: 
    CREATE FUNCTION dbo.Parse(@Array VARCHAR(1000), @Separator VARCHAR(10))
    RETURNS @ResultTable TABLE (ParseValue VARCHAR(100))AS
    BEGIN
    DECLARE @SeparatorPosition INT
    DECLARE @ArrayValue VARCHAR(1000)
    SET @Array = @Array + @Separator
    WHILE PATINDEX('%' + @Separator + '%' , @Array) <> 0
    BEGIN
    SELECT @SeparatorPosition = PATINDEX('%' + @Separator + '%', @Array)
    SELECT @ArrayValue = LEFT(@Array, @SeparatorPosition - 1)
    INSERT @ResultTable VALUES (CAST(@ArrayValue AS VARCHAR))
    SELECT @Array = STUFF(@Array, 1, @SeparatorPosition, '')
    END
    RETURN
    END
    Once created you can do things like this:
    SELECT * FROM Parse('John,Bill,David,Thomas', ',')
    SELECT * FROM (SELECT 'John' AS TestName union select 'David' AS TestName) AS Main
    WHERE TestName IN (SELECT ParseValue FROM dbo.Parse('John,Bill,David,Thomas', ','))
    This is what your SQL query would probably look like:
    SELECT OperationID, OperationName FROM dbo.Operations
    WHERE AreaID IN (SELECT ParseValue FROM dbo.Parse(@Area, ','))
    You may need to fiddle around with the Separator depending on whether SQL Server inserts a space between the comma and next value.

  • What is the best way to pass a controllin​g signal out of a sub vi or more than one layer of for loop, while the sub vi or for loops are still running?

    I have a vi that runs through two for loops and a while loop, then after a certain number of iterations on the inner while loop it is supposed to pass a trigger to a case stucture to start measurement. I have tried using a local variable attached to a boolean control which in turn is attached to the true case of the case structure involving the measurement sub vi. What is happening is that the boolean control will light on the front panel at the correct # of iterations in the while loop, as if true, but the measurement is not taken, and the boolean control never goes back to false. It remains lit. Am I u
    sing the local variable incorrectly? If so, where am I going wrong.
    Attachments:
    GL_Flicker.vi ‏118 KB
    Take_Measurements.vi ‏147 KB

    Hello planar,
    There are multiple ways to pass control information between loops and VIs and each one has its place. For simple VIs like your example, a local variable will be fine.
    The main reason the subVI is not running is that the case structure is not continuously polling the Boolean control. This is because the case structure is not inside a loop and as such will only read the Boolean value once and execute once. Encasing the case structure and control inside the while loop should solve the issue of the subVI not running.
    You may find the following links of help in creating more robust and advanced VI architectures.
    Application Design Patter
    ns: Master/Slave
    LabVIEW Application Design Patterns
    Keep up to date on the latest PXI news at twitter.com/pxi

  • Is there a way of passing a mixed cluster of numbers and booleans to teststand

    Hi,
    I have a labview VI that contains an output cluster containing both numeric and boolean results and would like to pass this to Teststand. At the moment I have coverted all my boolean results to  '1/0'  so that I can create a numeric array and can quite easily pass this to Teststand (using multiple numeric limit test). 
    Is there a way to pass mixed results to Teststand and write in the limits (example PASS and GT 5V) or do I have to stick with what I have?
    Chris

    Which test step type to use depends on what you have to analyze - a boolean condition? String? Number(s)? I can't tell you because I don't know what's in your cluster. If you click on the plus sign next to the parameter name "output cluster" you will see all paramters and their types, which are passed from the VI to TestStand.
    You can either create a variable for the whole cluster, or you can assign all or just some values from within the cluster to variables.
    The name of the variable (Locals.xxxxxxx... or FileGlobals.xxxxx...) ist what you type in the value field. You can also choose the variable from the expression browser by clicking on the f(x) button.
    Are you new to TestStand, do you know how to work with variables in TS?
    Maybe the attached picture gives you an example, there I am assigning the values from VI output "VoltageOutputArray" to the TS variable locals.VoltageMeasurement.
    This variable ist used again on the tab "Data Source" as the Data Source Expression.
    Regards,
    gedi
    Attachments:
    stepsettings.jpg ‏89 KB

  • Correct way to restore from Time Machine backup - Lion clean install

    I did a clean install of Lion, and am wondering — what's the correct way to restore files in my Home folder to my new installation?
    For example, I simply dragged over my iTunes folder from the "Latest" Time Machine backup.
    Perhaps instead I should restore from the backup differently? For example, open the ~/Music folder, then open Time Machine.app, and restore that folder through that?
    I always thought that manually dragging the "Latest" backup from the disk should do the trick the same way? Or an important question is — can some files be somehow excluded?
    I did everything through dragging, and haven't noticed problems... BUT, perhaps I should go back and re-do everything the "right" way if there is one?
    (I purposefully avoided doing a Restore, as I didn't want any of the caches, Applications and Library items restored — wanted to start fresh.)

    For convenience mostly. I use the Terminal a lot so I have lots of "dot files" that are at the root of my home directory and hidden.
    One problem is that many of those programs have data in Music, Photos, etc all organized by databases somewhere in ~/Library. You have to make sure to get them re-joined. It can be done. You just have to be careful with it. If you lose your iPhoto archive in the process, the first thing someone is going to ask is why didn't you use Migration Assistant.
    Until recently, I performed all my major MacOS X upgrades using this manual procedure and, for me, the extra hassle was worth the cleanliness. I have lost a couple of software registration codes that I couldn't ever get back. C'est la vie. I would keep my old Library folder around for quite some time until I was sure I wouldn't need anything out of it. These days, I'm too busy and too lazy. I just use one of the automatic methods.

  • Any Easy Way to pass initial parameters to a VI created with New VI?

    In LabVIEW 2010 I can use OpenG's New VI function to create and launch a VI that is built from a template.
    Is there any easy way to pass initial parameters from the VI that creates the New VI to the New VI that will be available as soon as the New VI starts?

    Check out the Control Value Set invoke node. I personally don't like this node, and tst has got a great suggestion to promote cleaner, less fragile syntax for launching VI's dynamically that require input parameters.
    a.lia-user-name-link[href="/t5/user/viewprofilepage/user-id/88938"] {color: black;} a.lia-user-name-link[href="/t5/user/viewprofilepage/user-id/88938"]:after {content: '';} .jrd-sig {height: 80px; overflow: visible;} .jrd-sig-deploy {float:left; opacity:0.2;} .jrd-sig-img {float:right; opacity:0.2;} .jrd-sig-img:hover {opacity:0.8;} .jrd-sig-deploy:hover {opacity:0.8;}

  • Correct way bounce a master mix from Logic?

    I've been trying to bounce a master mix straight from Logic using AdLimiter (and in some cases multipressor) in the master output. I must be doing something wrong, because I always end up with totally mashed, pumping and overdriven bounced mixes, even with just a 2-3 dB AdLimiter gains.
    I've previously used setup on PC where I bounced a dry mix, loaded the bounced mix to Soundforge (or similar editor), normalized to 0dB, then added Waves C4 and L1 (in that order) and used maybe 5dB gain with L1. Then render.. and that way I got a nice loud "master mix".
    I now don't have access to waves plugins nor an external wave editor. So I figured I could do pretty much the same in Logic, if I monitor the mix, so that the master output doesn't clip, but peaks stays at around -0.5dB, so that I don't really need to normalize. Then I add Multipressor and AdLimiter in that order and start tweaking. But I'm not doing something right here, because now I get a very quiet (and limited?) signal, because I have previously had to lower the master output volume to prevent clipping. Any gain over 1dB I do to AdLimiter makes the mix sound like crap. Plus the whole mix is now -6dB or so, because of the previous volume limiting to prevent clipping.
    That was a bit of a long story, but I hope someone understands the question I tried to ask.
    But in short, I'd like to bounce a nice mix which is compressed and limited to be around -5 to -7 dB louder than the original mix. What is the correct way to do this?
    Thanks!

    But in short, I'd like to bounce a nice mix which is
    compressed and limited to be around -5 to -7 dB
    louder than the original mix. What is the correct way
    to do this?
    You might want to check out other mastering plugins. I'm not a big fan of the AdLimiter. Universal Audio's UAD1 (http://www.uaudio.com/) with the Precision Limiter gives very nice results. There are also some nice compressors available for the UAD1. Another possibility is buying the waves L3 to do the limiting, but this plugin is relatively expensive. Both options aren't cheap, though, but they will give better results than the Adlimiter.
    by the way: Audacity (http://audacity.sourceforge.net/) is a nice freeware audio editor. Nothing fancy, but it works.

  • What is the best way to pass a constant to a cin expecting a pointer to a value?

    I have a cin which has a leg that is expecting a pointer to a value. On the diagram, what is the best way to connect a constant widget to this leg of the cin? Connecting it directly crashes labview as it treats the constant as a pointer to memory.
    Thanks

    I am not sure that I understand your issue. CIN variables can be Input-Output or Output only. Either way, they are being passed in as a pointer to a value. You can see this very easily by placing down a CIN and wiring a constant integer to it. Next, right-click on the CIN and create the C file. You will see that the parameter list has an int* in it.
    If you are still having problems, do you have to create a CIN or can you create a DLL instead? The DLL will give you a few more ways to pass the data than a CIN does with no real performance decrease.
    Also, have you read the "Using External Code in LabVIEW" manual? This hsould answer some questions as well.
    Randy Hoskin
    Applications Engineer
    National Instruments
    http://www.ni.com/ask

  • Low pass filter in LabVIEW Base Development System

    Hello,
    I've got a problem for several days and I haven't find even a hint to fix it so it's driving me crazy.
    I'm developing an application on LabVIEW Base Development System for automatical aquisition and exploitation of five signals.
    These signals are generated by a deformation gauge and four potentiometers linked to a NI USB 6210.
    I'm using the DAQ assistant on LabVIEW to get and use these signals.
    My problem is that I need a 2nd order low pass filter on the deformation gauge signal to get something I can use afterward and none is include in the Base development Sytem of LabVIEW.
    I'm sure there is a way to pass through this without buying the Full Development version but I haven't found it yet.
    Does anybody has already had this problem and succeed in fixing it ?
    If yes, can I have the code ?
    Thanks

    Thanks for your responses.
    I've tried to create a subVI using the transfer function of the filter I need.
    Here is the diagram of this subVI :
    I'm not sure of this transfer function at all. It seems too simple to me.
    Does it look weird to you or does a low-pass second order filter can have such a simple transfer function ?
    I've tried it and my signal is still unstable. I guess I'm doing something wrong, but as I'm not that good in electronics, I can't figure out what.
    Thanks again

  • Correct way to upgrade from LP 8 to 9 with all the extra content?

    I know that Apple has moved around the default folders for Apple Loops and extra audio content with different versions of Logic. When upgrading from a full install of LP8 to LP9, what is the correct way to do that. I'm worried I may get duplicate Apple Loops etc.
    Should I just run the installer and install all 9 discs to the default settings, or do I need to pay attention to which folders the extra audio content goes? I'm seeing a scenario where the Jam Packs from LP8 are in a different folder than the default for LP9 and so will get installed a second time.

    Thank you for your reply. So the jam Packs are identical to LP8? Then I can skip thoseI have a pretty good idea of where the actual files are located. So I should be able to figure it out.
    How can I the make sure that every file on the disk is actually in the loop browser , and to avoid duplicates? Over the years as directories have been changed for GB and LP, it's been quite confusing, especially since I already had some Jam Packs and also Soundtrack Pro and corresponding Loops before they became part of LP and some other Loop packages. Is it really as easy as deleting everything in the Loop Browser and then dragging all the folders from the HD in there?

  • Correct way to AddOrUpdate Property of Class in a ConcurrentDictionary?

    I have a ConcurrentDictionary we'll call ParamaterList.  And a class named Parameter. 
    Class parameter{
    public string Username = string.Empty;
    public string FirstName = string.Empty;
    public string LastName = string.Empty;       
    public bool enabled = false;
    ConcurrentDictionary<string, parameter> ParameterList = new ConcurrentDictionary<string, parameter>;
    I want to confirm that I'm doing this correctly and there isn't a better way.  To update a class I am doing this:
    ParameterList.AddOrUpdate("username", true, (k, v) => {v.enabled = true; return v;});
    Is that the correct approach or is there a 'correct' way to update a property of v directly without returning a full 'new' class? My classes are small now but I would like to learn best practices for concurrentDictionaries. 

    1) TryGetValue is thread safe.  If someone is trying to modify the collection while you're retrieving it then they will block until you have the value.
    2) Yes another thread could remove the item after you get it but there is no concurrent collection that guarantees otherwise. A concurrent collection simply guarantees that while a particular method on the collection is being executed that no other
    thread will cause changes that will cause it to fail.  Once the method returns another thread can do whatever it wants.  90% of the time that is perfectly fine and expected.  In the few cases where you need to ensure an item remains in a collection
    for some fixed period of time then you'll have to use a lock instead.  But after the lock is released the item can still be removed. 
    Removing an item from the collection does not invalidate your copy of that item.  You still have a reference to the item and it'll exist and be usable as long as you hold onto it.  Whether it is in the collection or not doesn't matter.  In
    general multiple writers to a collection is not a good thing to have so you'll want to consider modifying your code to have a single writer but any # of readers.  This will simplify your code and make it easier to maintain.
    3) If you want to update an item if it exists or create a new one if it doesn't then you have to make some decisions.  TryAddUpdate would be the way to go if you want to recreate the item each time whether it is already there or not. If you only want
    to create it if it doesn't exist then use TryGetValue and if that fails then use TryAdd to add a new one. However a concurrent collection doesn't prevent modifications between these calls so between the time you get the value and update/add it somebody else
    could remove it, add it or both.  If you need a gurantee that the collection does not change during these calls then you have to use a lock because the collection itself doesn't provide a long enough lock. 
    If you do decide to use TryAddUpdate note that each time you will add a new object to the collection and this will cause problems for other threads.  For example another thread may use TryGetValue to get the object and then set one of the properties. 
    But if another thread calls TryAddUpdate during this time a new object is created and added to the collection so the original thread's changes are lost and they are none the wiser.  However if you use TryGetValue first and only call TryAdd if the item
    doesn't exist yet then you will always be working against the same object across threads and by using the return value of the methods you can determine whether you got a value or successfully added it.  This is the cost of using multiple writers.
    4) The collections are thread-safe, not the objects in them.  There is no guarantees around the thread safety of the objects in the collection. If you need thread safety on the objects themselves then either the object type needs to be thread safe or
    you have to use a lock.  For the case of a single writer, multiple readers then you are better off using a ReaderWriterLock instead of a concurrent dictionary.

Maybe you are looking for

  • Crystal report not working on 64 bit machine

    Hello friends, Hope everyone is doing good.  I have an issue and you all are requested to help me out. I have build an Application using VS 2008, i used Oracle 10g as database and Crystal report 2008 for reports. The Application and reports are worki

  • I"m in canada and i download itunes uk and now i can't get back to my iTunes canada account. Please help.

    Help. I was trying to down load a song from Itunes in UK that's not available in Canada but now its overridden my itunes account in Canada. How do i restore my Canadian itunes default?

  • Nokia N97 Mini LOST FOLDERS

    For some reason, I'm not sure if my N97 mini got infected by a virus or what but apparently some of my folders such as download, music, images were all gone for both Mass Memory and Memory Card. It's still der but has a file extension of .exe. Prior

  • JDeveloper gets slow with a lot of managed beans declared in faces-config

    Hello, I have an application with a lot of managed-beans (in fact, hundreds of backing beans). When I open the visual designer, it takes a long time to render the page, and after it gets very slow. Even the source view gets slow. When I remove some p

  • Very Urgent: Invalid number in database

    We are getting an invalid number error on a date field in a Form that has run this procedure for two years. The query is something like select max(upload_date) from pfe_time_report where ssn = :block_update.ssn. We think that an invalid number has be