Annotation of q_a/samples/event/readme, revision 1.1.1.1

1.1       root        1:  Sample: Asynchronous I/O Demonstration
                      2: 
                      3: Summary:
                      4: 
                      5: The EVENT sample demonstrates perfoming asynchronous I/O in
                      6: Win32.  In Win32 you are able to do this in two ways.  One
                      7: is similar to OS/2 where a thread was spawned which did the
                      8: IO and returned. With Win32, when you create a file it is
                      9: able to signal to the system that you wish to perform I/O
                     10: asynchronously.  Then when, say, ReadFile is going to take a
                     11: significant amount of time to complete it will generate
                     12: ERROR_IO_PENDING. This signals to you to go about doing
                     13: other tasks till you NEED the data.  At which time you will
                     14: use the function GetOverlappedResults which will finish the
                     15: I/O.
                     16: 
                     17: More Information:
                     18: 
                     19: Note this has all been done without the need of an
                     20: additional thread to perform the work. This sample only
                     21: touches on the capabilities of what one can do with the new
                     22: overlapped I/O functions. For example an application that
                     23: uses pipes to communicate over the network to other clients
                     24: can create these file handles with the overlapped flag.
                     25: Then instead of blocking and waiting for a connection the
                     26: server app can go about doing useful tasks waiting for the
                     27: pipe to enter the "signaled" state. Another even more exotic
                     28: feature of files created this way is you are able to perform
                     29: more than one operation on this handle at one time such as
                     30: reading and writing to the same file.
                     31: 
                     32: All this power does not come with out some responsibilities
                     33: on the programmer's side. First the system does not keep
                     34: track of the system file pointers as you are no doubt used
                     35: to. And naturally just because the call returns imediately
                     36: you are NOT able to use the data until the system responds
                     37: by setting an event to a signaled state.
                     38: 
                     39: In the first case this simply means you need to keep track
                     40: of the value "lpNumberOfBytesTransfered" returned by
                     41: GetOverlappedResult and update the OVERLAPPED structure with
                     42: this information. This structure OVERLAPPED will then be
                     43: passed into the Read/Writefile function which will use this
                     44: as the offset to starting point for the I/O operation. The
                     45: first call to Read/Writefile will normally then have the
                     46: offset fields in the OVERLAPPED structure set to zero. The
                     47: second case should be used as a criteria of whether to use
                     48: this type of I/O obviously if you need the data before you
                     49: can do anything else you may as well use normal sychronous
                     50: I/O and let the system handle the details for you. This also
                     51: demonstrates an important reason for using an EVENT to wait
                     52: on rather than the file handle. While both are allowed in a
                     53: multithread application one could not gaurantee that the
                     54: thread which set the handle to the signalled state would be
                     55: the one returning from the GetOverlappedResult since each
                     56: thread was using the same handle to wait on.
                     57: 
                     58: Inorder to keep this sample focused, the user interface is
                     59: simple.  To run this sample at the command prompt type:
                     60: 
                     61:      ASYNC_IO <In_file> <Out_file>
                     62: 
                     63: where In_file and Out_file are place holders. As this is
                     64: implemented you are not able to write over an existing file.
                     65: While this app is running you will see the vital statistics
                     66: such as:
                     67: 
                     68:   When IO is pending
                     69:   How many bytes are transfered
                     70:   End of file
                     71: 
                     72: 
                     73: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.