Several producers response queue

In my application, I'm working on an API that is the queue of conduit. Several different parts of the code can send a 'command' and wait for a response.  Obviously if two separate sections of code send a different command roughly at the same time, we have a race condition for the response queue.

I have many ideas on how to solve this problem (action engine response, get an overview of the queue and search data appropriate, semaphores), but I wonder if there is a ' standard method / best practices "to do.  I have not run into this problem before.  So far, I'm leaning towards semaphores - it seems the simplest solution.  Here's a mockup I did as a proof of concept.

BowenM wrote:

Certainly, there is nothing to say that the response must be a queue. I could use a variable overall, functional overall, etc.  The queue was just for the convention, and I freely admit that it is a 'bad' use of a queue. The problem is always the same: how to make data from a producer for many consumers without having a convoluted solution heavy.

Well, if you do not want to incorporate the queue back into the message and then use a non-reentrant VI is the only access to send commands to your consumers.  This VI would send the command and wait for an answer.  Since the VI is not reentrant, it blocks the other loops until the answer is back.  It's much cleaner and probably faster, than the use of the semaphore.

Tags: NI Software

Similar Questions

  • Several producers an consumers

    Hello, I am developing an application where they are drawn at different speeds and different processes, but I want to store it in a file, to store this data I can, if I have several producers and a consumer?

    Seems easy enough-if you use a queue!

    There is a pretty good example called queue multiplexer provided with LabVIEW and collect data from several producers.

  • is it possible to run several producers of film at a time?

    I use movie maker to restore and snap together large amounts of clips in a single movie that I then post on youtube.

    Do walkthroughs of games so I have a lot of work to do there, and I was wondering if I have a video editing or is it being published can run another instance of Movie maker and work on another video to increase my ability to output videos?

    I don't think you can have two of the same movie maker, but on my Win7 machine, I have Windows Live Movie Maker and Windows Movie Maker 2.6 installed.

    Windows Live Movie Maker 2011
    http://explore.live.com/Windows-Live-Movie-Maker?OS=other

    Windows Movie Maker 2.6
    http://www.Microsoft.com/downloads/en/details.aspx?FamilyId=d6ba5972-328e-4df7-8f9d-068fc0f80cfc&displaylang=en

  • AdfCustomEvent.queue does not provide several events (11.1.1.3.0)

    I created a JSF page in which I use ADFCustomEvent.queue to call a method in a pod of support from JavaScript code. It seems, however, that if several events are queued, method support the bean is called only once. This is expected behavior?


    For example, my JSF has simply a command button. When you click on it, the "clientListener" calls a JavaScript function. This JS function queue of events, and the "serverListener" sends those on the server. (Code example is below).


    < af:document id = binding = "#{"d1"backing_eventtest.d1}" >
    < af:form id = binding = "#{backing_eventtest.f1"f1"}" >
    < af:commandButton text = "events."
    Binding = "#{backing_eventtest." CB1}"id ="cb1 ".
    partialSubmit = "true" >
    < af:clientListener method = "OnButtonClick" type = "click on" / >
    < af:serverListener type = "eventServerListener".
    Method = "#{backing_eventtest.handlePageMessage}" / >
    < / af:commandButton >
    < / af:form >

    < af:resource type = "javascript" >
    OnButtonClick() {} function
    var BTN = AdfPage.PAGE.findComponent ("cb1");
    AdfCustomEvent.queue (btn, "eventServerListener", \{message:"Hello 1" \}, true);
    AdfCustomEvent.queue (btn, "eventServerListener", \{message:"Hello 2" \}, true);
    AdfCustomEvent.queue (btn, "eventServerListener", \{message:"Hello 3" \}, true);
    AdfCustomEvent.queue (btn, "eventServerListener", \{message:"Hello 4" \}, true);
    AdfCustomEvent.queue (btn, "eventServerListener", \{message:"Hello 5" \}, true);
    }
    < / af:resource >
    < / af:document >


    In the method of handlePageMessage of the bean of my support, the message 'Hello 5' only ever comes through. I was expecting sort all 5 events to come through.

    Are my expectations wrong, or is it a "problem"?

    Published by: user614824 on May 28, 2010 09:42

    I guess that your expectations are wrong here. The framework works as expected.
    The doc (5.4.3 what you will need to know the data Marshalling and Demarshalling)

    When you send information from JavaScript to Java, JavaScript data objects are converted (moult) in XML, which is then analyzed back or unmarshaled into Java objects on the server-side. For example, consider a JSF page that contains a commandButton control element whose ID is cmd. When a user clicks on the commandButton control component, the customer must communicate with the server that an actionEvent was triggered by this specific commandButton control. In terms of requestParameter, information is mapped with the key using the format event. + id, where id is the ID of the component. The key to map to the commandComponent requestParameter would therefore be the XML string that is stored as a value of the event.cmd key.

    This part of the documentation speaks of how events are passed to the server. Because an event is placed into the foreground of requestParameter (which is a java.util.map) each of your events overrides that you queued before. You will see then that the last of them.

    Timo

  • A time-out of the finite queue of wiring allows parallelism?

    I have several loops (11) all running in parallel, set up with a producer--> several consumer-> multiple consumer architecture.

    In each of the loops of consumer, I wired the values of time-out on the order of 1 second each of the vi "remove item" which feed on each loop. However, the overall performance of all vi is very slugish.  I have no expectation s vi in the loops of consumer, I guess the time queue supports this feature and allows labview to work its magic of parallelism. This hypothesis is correct?

    For what it's worth, the loop of the producer bed synchronously large shared memory double paintings representing the acquired data and post processed in RT through virtualization (hypervisor). The loop of producer implements an element of expectation. This loop of producer distributes the data to the various queues, depending on the data type meta code embedded in the data of recevied. Then, first consumer level loops review data, update some PLC tags accordingly (via the datasocket connection) and, under certain conditions, send signals well formatted the next level consumer loops that manages storage PDM.

    Each consumer has a dedicated queue and each of them are powered by several producers to the top of the pipe. I put vi waiting in each loop of consumer with a value of about half of the time waiting for data to arrive, and it did not help at all. However, the problem has been resolved by configuring the properties of execution of almost all under vi as priority of subroutine, returning with dedicated allocation of memory. I know it's basic stuff that I should have checked before hand, but everything works fine now.

    Thanks for the help anyway!

  • What is the fastest method producer consumer. Queue, RT-FIFO, event

    Hi all

    Another question completed for the pro:

    I recently inherited the labview code that uses RT-FIFO for the transfer mechanism in the architecture of the producer consumer.

    The code was first written in 3-4 years and is currently in LV8.6. It is possible that the reasons for the architectural decision no longer exists.

    I am qualified using a producer consumer queued architecture,

    I understand the RT-FIFO Architecture.

    I started using an architecture based on events from the user.

    (I have attached samples of each)

    I also see the existence of a priority queue

    Each method has its own capabilities and gaps, that hand, nobody knows the relative performance of each method.

    (Assuming that the only process)

    I would expect RT-FIFO to be faster, there seems to be a version of low characteristic of a standard queue.

    What is the perfornace hit to use a coding user-friendly queue more

    RT-FIFO description talks about commications between the time-critical and lower priority threads.

    Until today, I thought that the queues had the same capacity.

    I've included an event method that I commonly use for review by peers and help from other users...

    It allows to:

    1. several producers with different types of data

    2. process 37 production order.

    3 allows asynchronous verification of functional notifiers such as stop, start and abort.

    4. in a system not real-time, it can include interactions of façade.

    What I do not understand on this subject, that's what are overhead or thread priority changes that may occur using this architecture (it solves a lot of problems for me).

    Thanks in advance,

    Hi Timmar,

    Here's a KB article on some frequently asked questions about the RT FIFO: http://digital.ni.com/public.nsf/allkb/7AE7075AF1B2C58486256AED006A029F?OpenDocument

    The more relevant question is #4, I posted below.

    What is the difference between RT FIFO and queues? 
    Functionally, RT FIFO and LabVIEW queues are two pads of first in, first out. However, here are the main differences between them:

    • RT FIFOs run deterministically in LabVIEW and evanescent code queues are not. This comes from the fact that queues use block calls during read/write to the resource shared, while RT FIFOs use non-blocking calls.
    • RT FIFO are fixed size while queues develop when items are added to them.
    • RT FIFOs will execute the code, even if there are input errors. They can (and will) produce new errors and spread the existing errors.
    • Queues work with any type of data, while the data types that can be used with RT FIFOs are limited. Generally any type of data involving allocations of extra memory can be used with RT FIFOs to preserve determinism.

    Let us know if you have persistent questions!

    Ryan

  • What happens if several consumers - whose architecture SW should I use?

    There are several models of VI and documentation on the producers/consumers type aqrchitectures

    I have some experience with LV, but limited experience with multi-threading programs and events.

    My question is what happens if the consumer also produced data? ... the tutorials do not really extend to it.

    In my application, I have 3 USB CAN transmitters and a NOR-DAQ.

    I intend to have loops or threads for each multiple hardware device at the lower level.

    There will be a loop of the UI (producer) and a "test step sequencer" interpret the activity of the façade and send commands to the hardware devices to take action or perform a measurement.

    My main problem is what is the best method/practice of transmission of data to the 'test step sequencer' material once the acquisition is completed?

    Do you use the same queue to pass data back (for evaluation of success/failure analysis and test) or any other method.

    This might work.

    A difference between the Registrant and the queues is that with queues, you can be sure that the loop of consumer gets the message (assuming that there is no problem with the producer generating and sending).  Even if the consumer is busy doing other things, the message waits in "inbox" of the consumer until he is ready to read.

    A notifier, there is no guarantee that every piece of code that expects a notification will get all messages.  Think that the declarant is a whiteboard.  A message to put out there for anyone interested to read.  But when a new message to be sent, the sender is declined, clears the Board and writes the new message.  If someone who is interested in messages has been busy and you can't go to the Commission while the first message is there, it will never see the message.

    If you want to ensure that each loop gets all their messages, then just a queue for each loop that behaves like an Inbox.  If you need to send the same message to several loops, then queue the data in multiple queues.  If you get a message back, enqueue sending loops reference to queue in the data (self-addressed stamped envelope).  (you can also put a Boolean value in the cluster that could be an indicator as to whether the 2nd loop should send something again or not.)  If you need the first loop to wait for the return data before you go, then he's waiting in the queue.  But you can use the time-out function so that it is not wait forever for something that never comes back and integrate logic into your program so that it can handle this situation (doing nothing, resend the message, open a session, or displays an error message...)

  • bug in the queue with loss

    Hello

    In my project, I use the processes of consumers/producers using queues for transfer of measurement data

    When I remove elements in a process of consumption, a queue that is initialized to the size one and containing of waveform, sometimes empty items are returned. Is this a known bug?

    I have a workaround to do this, check if the element is empty.

    / Roger


  • Advanced Queuing (correlation id feature)

    Nice day!

    I'm studying Oracle Advanced Queuing concepts and have faced with the idea that I don't understand: correlation id feature. I'd be happy if someone could clarify this matter for me.

    Say we have several of your queue and I add a subscriber to it and I'm specifies the rule to dequeue for this Subscriber:

    begin
        dbms_aqadm.add_subscriber(queue_name => 'aq_admin_plsql.msg_queue'
                         ,subscriber => sys.aq$_agent(name => 'APP1', address => null,protocol => null)
                         ,rule => q'[corrid='111']');
    end;
    /
    

    I guess the part above the code means that the consumer "APP1" can only dequeue messages with message_properties.correlation: = '111';

    Am I correct in saying this and if not what one hears the argument of rule for?

    Unfortunately, my hypothesis seems to be false. I would like to show the test case to explain.

    CONNECT / as sysdba
    
    CREATE USER aq_admin_plsql IDENTIFIED BY aq_admin_plsql
      DEFAULT TABLESPACE users
      TEMPORARY TABLESPACE temp;
    
    
    ALTER USER aq_admin_plsql QUOTA UNLIMITED ON users;
    
    
    GRANT aq_administrator_role TO aq_admin_plsql;
    GRANT connect               TO aq_admin_plsql;
    GRANT create type           TO aq_admin_plsql;
    GRANT create sequence       TO aq_admin_plsql;
    grant resource to aq_admin_plsql;
    grant create  procedure to aq_admin_plsql;
    
    
    EXECUTE dbms_aqadm.grant_type_access('aq_admin_plsql');
    ;
    grant create  procedure to aq_admin_plsql;
    
    
    EXECUTE dbms_aqadm.grant_type_access('aq_admin_plsql');
    

    CONNECT aq_admin_plsql/aq_admin_plsql
    
    
    CREATE TYPE message_type AS OBJECT (
        message_id     NUMBER(15)
      , subject        VARCHAR2(100)
      , text           VARCHAR2(100)
    )
    /
    
    
    
    CREATE SEQUENCE message_seq
           INCREMENT BY 1
           START WITH 1000
           NOMAXVALUE
           NOCYCLE;
    
    
    
    

    CONNECT aq_admin_plsql/aq_admin_plsql
    SET SERVEROUTPUT ON
    
    
    BEGIN
    
    
        -- -------------------------------------------------------
    
    
        DBMS_AQADM.CREATE_QUEUE_TABLE (
            queue_table         => 'aq_admin_plsql.msg_qt'
          , queue_payload_type  => 'aq_admin_plsql.message_type'
          , sort_list           =>  'priority,enq_time'
          , multiple_consumers  =>  TRUE
        );
    
    
        -- -------------------------------------------------------
    
    
        DBMS_AQADM.CREATE_QUEUE (
            queue_name          => 'msg_queue'
          , queue_table         => 'aq_admin_plsql.msg_qt'
          , queue_type          => DBMS_AQADM.NORMAL_QUEUE
          , max_retries         => 0                        --max number of dequeue retries (rollbacks) before moving to exception queue
          , retry_delay         => 0                        --after failure, delay before msg can be dequeued again
          , retention_time      => 100                        --time in which msg remains in the queue table after dequeuing
          , dependency_tracking => FALSE                    -- not currently implemented
          , comment             => 'Test Object Type Queue'
          , auto_commit         => FALSE                    --deprecated
        );
    
    
        -- -------------------------------------------------------
    
    
        DBMS_AQADM.START_QUEUE('msg_queue');
    
    
        -- -------------------------------------------------------
    
      dbms_aqadm.add_subscriber(queue_name => 'aq_admin_plsql.msg_queue'
                         ,subscriber => sys.aq$_agent(name => 'APP1', address => null,protocol => null)
       ,rule => q'[corrid='111']');
    
    
    END;
    /
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    Now, the queue of the message with the correlation id say '222'.

    CONNECT aq_admin_plsql/aq_admin_plsql
    
    
    DECLARE
       enqueue_options      DBMS_AQ.ENQUEUE_OPTIONS_T;
       message_properties   DBMS_AQ.MESSAGE_PROPERTIES_T;
       message_handle       RAW (16);
       MESSAGE              aq_admin_plsql.MESSAGE_TYPE;
    BEGIN
       MESSAGE :=
          AQ_ADMIN_PLSQL.MESSAGE_TYPE (aq_admin_plsql.message_seq.NEXTVAL,
                                       'Subject: EXAMPLE MESSAGE',
                                       'Message: THIS IS A SAMPLE MESSAGE.');
    
    
       ------------------------------------------------------------------------
       enqueue_options.VISIBILITY := DBMS_AQ.ON_COMMIT; --ON_COMMIT - the enqueue is part of the current transaction
       enqueue_options.SEQUENCE_DEVIATION := NULL;                    --deprecated
       
       ----------------------------------------------------------------------------
       message_properties.priority := -5; --priority of message. Smaller number = higher priority, may be negative.
       message_properties.delay := DBMS_AQ.NO_DELAY; --Is the number of seconds for which the message is in the WAITING state.
       message_properties.expiration := DBMS_AQ.NEVER; --Is the number of seconds during which the message is available for dequeuing, starting from
       message_properties.correlation := '222'; --Is an identifier supplied by the producer of the message at the time of enqueuing the message.
       message_properties.recipient_list(1) := sys.aq$_agent('APP1', null, null); 
    
    
       ------------------------------------------------------------------------------------------------------------
       DBMS_AQ.ENQUEUE (queue_name           => 'aq_admin_plsql.msg_queue',
                        enqueue_options      => enqueue_options,
                        message_properties   => message_properties,
                        payload              => MESSAGE,
                        msgid                => message_handle     --out_parameter
                                                              );
    
    
       COMMIT;
    ----------------------------------------------------------------------------------------------
    END;
    /
    
    
    
    
    
    
    
    
    

    We can verify that the message has managed to put in the queue.

    select t.MSG_ID, t.CORR_ID, t.MSG_STATE, t.CONSUMER_NAME
    from aq$msg_qt t
    ; 
    

    MSG_ID(2)CORR_IDMSG_STATECONSUMER_NAME
    14506AAED0CCBA48E055000000000001222LOANAPP1

    Now, I do the dequeue the message defines the name of the consumer to "APP1" and I think that the message will not be removed because we have a rule for this Subscriber: corrid'art = '111'

    DECLARE
       dequeue_options      DBMS_AQ.DEQUEUE_OPTIONS_T;
       message_properties   DBMS_AQ.MESSAGE_PROPERTIES_T;
       message_handle       RAW (16);
       MESSAGE              aq_admin_plsql.MESSAGE_TYPE;
    BEGIN
       ------------------------------------------------------------
       dequeue_options.consumer_name := 'APP1'; --Indicates the consumer for multi-consumer queues.
       dequeue_options.dequeue_mode := DBMS_AQ.remove;
       dequeue_options.navigation := DBMS_AQ.FIRST_MESSAGE;
       dequeue_options.visibility := DBMS_AQ.IMMEDIATE;
       dequeue_options.wait := DBMS_AQ.FOREVER;
       dequeue_options.msgid := NULL;
       --------------------------------------------------------------
    
    
       DBMS_AQ.dequeue (queue_name           => 'aq_admin_plsql.msg_queue',
                        dequeue_options      => dequeue_options,
                        message_properties   => message_properties --out parameter
                        , payload              => MESSAGE            --out parameter
                        , msgid                => message_handle     --out parameter
                       );
    
    
    
    
       DBMS_OUTPUT.put_line ('+-----------------+');
       DBMS_OUTPUT.put_line ('| MESSAGE PAYLOAD |');
       DBMS_OUTPUT.put_line ('+-----------------+');
       DBMS_OUTPUT.put_line ('- Message ID   := ' || MESSAGE.message_id);
       DBMS_OUTPUT.put_line ('- Subject      := ' || MESSAGE.subject);
       DBMS_OUTPUT.put_line ('- Message      := ' || MESSAGE.text);
    
    
       COMMIT;
    END;
    /
    
    
    
    
    
    
    
    
    

    However, the message seems to be removed:

    select t.MSG_ID, t.CORR_ID, t.MSG_STATE, t.CONSUMER_NAME, t.DEQ_TIME, t.DEQ_USER_ID, t.DEQ_TXN_ID
    from aq$msg_qt t
    ; 
    

    MSG_ID(2)CORR_IDMSG_STATECONSUMER_NAMEDEQ_TIMEDEQ_USER_IDDEQ_TXN_IDQUEUE
    14506AAED0CCBA48E055000000000001222PROCESSEDAPP122.04.2015 16:53:11AQ_ADMIN_PLSQL8.29.2818MSG_QUEUE

    It seems strange, isn't it?

    To put it in a Word so my question is:

    1. How could the queue breaking the rules of correlation id? If it works as designed then what is the reason for the correlation id?

    I thank very you much in advance! I'd appreciate any help.

    Hello

    your problem in your example is that you have addressed your message explicitly to the Subscriber (line #21):

    message_properties.recipient_list(1) := sys.aq$_agent('APP1', null, null);
    

    This Subscriber will still get the info that there are new messages. Normally, you do not know the subscribers for messages

    and you don't publish it. If you remove this line then the rule is analyzed. For the payload parameter value "YYY", you will get:

    ORA-24033: no recipients for message
    

    Kind regards

    WoG

  • execution/multithreading helps

    I'm analyzing a data under labview professional 2d table updates data at 20 Hz or more.  I'd like to run both a 'short' (operations of addition may be 500) calculation and a long (maybe 0, 5-1 sec processing time?) calculation, with the short a update ~ 10 Hz and the update has been done for a long time a whenever it ends.  What is the best way to get this kind of thing in labview?

    ... of calibration routines that both loops of consumer depend on for their calculations.  These routines must be performed when the user pushes a button in the user interface.  What is the best way to coordinate access to these?

    Use several producers, one to add data to consumers, one to insert the calibration information.

    You will need make the data type for the queue a cluster. One of the elements to set the type of function, the other to add information given or cal.

    Attached example...

  • 3520 e - all - in - one deskjet Seri: download the software of the e-all-in-one series HP Deskjet 3520 for Windows Vista

    I can't find a software on the HP website for my e-all-in-one printer Deskjet 3520 so that I can scan documents in the form of PDF files.  At present, I can scan only to Microsoft Paint.  My original disk is damaged.  I contacted HP Support by phone and was informed that they are no longer supplied the software download for Windows Vista, that my computer is running.  I was told that there is a way around this, that can make me to level.  Unfortunately. After being moved several times and queued contiunous, I never got a solution.  Does anyone know where I can download the software online or I want Norman to do?

    Hi WYM1,

    Here is the LINK for your drivers for the Deskjet 3520 with the Windows Vista operating system.

    I hope that this solves your problem. Let me know!

    Thank you

  • Multiple copies of the functional global using vi references

    I have several producers acquisition in a global operation (a functional overall by the producer). These functional overall are identical except for the name. He would work to have only one functional global VI and get a separate reference for each producer? The corresponding consumer would have also used the appropriate reference to consume the data.

    The functional global contains an array of data that must be analyzed by the consumer. It is possible that the data table does not contain a complete set of data on a unique "store" by the producer operation. Of course, the consumer, is written to search for a complete data record before completing the processing of the file.

    Les__Bartel wrote:

    TST wrote:

    No matter that there is a better way, the answer to the question is Yes. The FGV must be reentrant and the reference you open must be re-entrant too and then you can use the CBR node to run the specific copy of the FGV.

    I thought that a reentrant vi would not maintain the State of the shift register not initialized by one call to the other.

    A reentrant VI will maintain the State of its shift uninitialized registers.  However, you must be very careful, how to do this.  You first need to make sure that it is set to allocate Clones.  What will happen in this situation, it is that each different place call you this sub - VI each will be a different clone.  This means that each call will have its own data.  The problem with this is that you cannot share the data between multiple instances and therefore multiple loops.  If you don't believe me, go play with mean it Point by Point VI.

    So what happens if you assign shared clones?  A big freakin mess '.  You will have no control over which clone called where, and there will be a major data corruption.

    This is why FGVs are almost always not reentrant.

  • Body of L ' goal and EOS Rebel T3i

    I asked a lot of questions here, haha.
    But I'm here with another question. So, I did a little research on the net about the use of the ' goal with a t3i and quite a few people say that they work well together? So objective L are not recommended for EOS Rebel bodies? Can someone explain this to me please.
    I recently bought the T3i and I want just a good lens. Preference for landscape photos. I'm also a few sports, low light and portrait photos.
    Suggestions for the landscape and all around the lens of photography would be great ():

    For landscape photography people often want to use a lens wide angle. Not always, there is no rule that says you can't use anything else. I say "it's usually the first thing that comes to mind

    One of the best wide angles that you get to use on a T3i is the Canon EF-S 10-22mm USM. It is not an 'L' but it doesn't matter.

    I suspect that what you have said about the use of an L series lens is due to the factor of cropping of your device photo, as has been suggested by several other responses. L - series will work fine on your camera, but all L-series lenses are models 'full frame', by definition. Therefore, none of the L will be particularly wide angle on your camera. So, when people hear 'landscape', they suggest something else that a L-series.

    You have four different purposes: landscape, sport, low light and portrait. The whole point of a DSLR as your T3i is to be able to Exchange lenses, to be able to adjust the camera for use in different situations. So I would say not to try to do it with a lens, but to look more lenses (some of which are Ls), which should ultimately give you better results. For example...

    Wide angle landscape: EF-S 10-22mm.

    Sport: 70-200/4, 70-200 / 4L, 70-200/2.8, 70-200 / 2.8 L IS II, 100-400 L IS, 300/4 L IS.

    Low light: 24/2.8 IS, 28/1.8, IS 35/2, 50/1.4, 50/1.8 II, 85/1.8.

    Portrait (Frank): 50/1.4, 85/1.8.

    Portrait (studio): EF - S 15-85 IS, the EF 28-135 IS, 24-105L, 24-70/4 IS, 24-70 / 2.8 L II.

    Portrait (environment): 20/2.8, 24/2.8 IS, 28/1.8, 35/2 IS.

    Versatile lens 'walk-around': EF-S 15-85 is... or, according to what the other lenses you get, EF - S 17 - 55 / 2.8 IS or EF 28-135 IS, 24-105L IS, 24-70 / 4L IS, 24-70 / 2.8 L II.

    There are many different ways to set up a lens kit. For example, maybe you just like a wide point of view than the 10-22mm for your landscape photography. If so, instead, you can choose the lens EF-S 15-85 mm as wide enough and because it can double as a walkaround lens and can even be useful for some portraits.

    A 'minimum' kit I often hang out with a camera of harvest is: 10-22mm, 28-135 IS, 300/4 IS w / 1. 4 X teleconverter and a Tamron 60/2.0 macro/portrait.

    When I'm shooting, what I do for the most part with crop sensor cameras, I usually wear: 10-22 mm and 24-70/2.8, but my most used lenses are the IS 70-200/2.8 and 300/4 IS. (In some cases I use also 70 - 200/4 IS and 300/2.8 IS).

    For the portrait with a crop sensor camera, my favorite lenses are: 28/1.8, 50/1.4, 85/1.8 and 135/2. Especially the 50mm and 85mm.

    Your camera can use all the EF-S and EF, including all of the L-series lenses. But just because a lens will fit and work does not mean it is the best choice for your application. In some cases buying a full frame capable lens for your camera will be useless... FF lenses can be bigger, heavier and more expensive... but not really give you the best performance, maybe even less. For example, a 16-35 / 2.8 L II is a wonderful goal on a FF camera, but it makes little sense to buy for use on a device of harvest. For less money, you can either get a lens that is really wide (EF-S 10-22mm), or a lens that offers a little wider range of focal lengths and IS (EF-S 17 - 55 / 2.8 IS) has.

    Depth of field in fact is not directly conducted by sizes of sensors of different cameras. What changes in depth of field are: focal length, Aperture and the distance about the goal. If you are looking for the low depth of field (blur a background for a portrait, for example), it takes a large aperture and a longer lens... and more you are close to the material the more shallow depth of field will be. If, however, you want lots of depth of field (for a landscape shot, for example), you want to use a smaller aperture and a shorter focal length... and more you are from the individual (within reasonable limits), will be the deepest depth of field.

    Where full-frame sensor vs cultures comes into force now is that for the same subject, framing with a crop sensor, that we need to stand further away with a given focal length, or if the same shooting distance will use a shorter focal length. In both cases, the result is 'less' depth of field, but it is an indirect result of different sensor size.

    Have fun shopping and learning about your new camera!

    ***********
    Alan Myers

    San Jose, California, USA.
    «Market softly and carry a great lens.»
    MATERIAL: 5DII, 7D(x2), 50D(x3), some other cameras, various lenses & accessories
    FLICKR & REPROGRAPHY

  • TCP IP multi client connection does not work correctly

    My program is a software communication client server where data of a cDaq collector server sends data to the client, and the client sends the command to the server to run. The problem I've encountered is when I sedn a command to the server, it shows that the server is receiving but it it is not running properly. Please take a look and see where I was wrong. I was stuck on this during some time. After this post, I'll add the subvis more

    Note to admin - screws removed by the request of the user.

    Missing Untitled 1 library.

    What does "not execute properly" mean?  What is it to do or not to do, and what you expect it to do?

    I see a problem in the Subvi the TCP - IP protocol client.  Why are you enqueueing an element then immediately made it?  You go to the queue again after the end of the Subvi.  But you have a loop in parallel when remove you the element.  You have a race condition.  Two things can happen.

    1. data gets in queue and removed inside the Subvi.  When it ends, it gets queued again in the same queue.  Then the parallel loop might it dequeue and work with it.  I'm guessing that if this order of execution occurs, it probably behave correctly for you.

    GOLD.

    2. data gets queued inside the Subvi.  The parallel loop with the dequeue is sitting there waiting for something, removes the element and works with.  Then the dequeue inside the Subvi that's always waiting for an element in the queue who won't, because now you have locked the code.  The loop cannot iterate to get more and more data in the queue.

    You have a lot of strange queue operations past in this sub - VI and an another Subvi in the parallel loop.  Why you get another reference to the queue, rinsing, then release this reference to queue.  I won't even try to guess how that would complicate the 2 scenarios, I already listed above.

    I offer several examples of queue to understand how they work.  Any given queue must have 1 wait operation, otherwise remove it will run to steal the other's data.

  • Probook4540s: 87% charged battery, won't start not computer.

    87% charged battery, won't start not computer. When power plugged in and started it shows not charging. If I remove the power cable, stop immediately.

    There are several complete responses with the steps to follow, which I did. Finally a new battery of bouht and considers the motherboard bringing not at not charge. The sending of the stack of return for credit.  Will just have to use with the power supply.

Maybe you are looking for