windows-nt/Source/XPSP1/NT/inetsrv/msmq/sdk/samples/mqport
2020-09-26 16:20:57 +08:00
..
makefile Add source files 2020-09-26 16:20:57 +08:00
mqport.cpp Add source files 2020-09-26 16:20:57 +08:00
mqport.dsp Add source files 2020-09-26 16:20:57 +08:00
mqport.mak Add source files 2020-09-26 16:20:57 +08:00
readme.txt Add source files 2020-09-26 16:20:57 +08:00

Sample: mqport

Purpose: 
This console app sample demonstrates how to use NT completion ports
in MSMQ in order to asynchronously receive messages in an
efficient manner. This mechanism is scalable in the number of queues
and messages by adding more processors/threads. Likewise,
generic completion port handlers can be provided to handle other NT
resources as well as queues.
 
Both the MSMQ COM components and the MQ API are used in this program.
Note that the COM components are used for queue creation, open and message
send.  Whereas the MQ API is used to implement completion port-based
asynchronous receive.


Requirements:
VC5 is required.
MSMQ 2.0 or later must be installed -- specifically mqoa.dll must be registered and
  on the path.

Project settings:
   - the include path must include mq.h's location: 
         e.g. ...\msmq\sdk\include
   - the link library path must include mqrt.lib's location:
         e.g ...\msmq\sdk\lib

Overview:
The following steps comprise this sample:
   - DS connection is detected and a public queue will be used on a DS enabled 
     computer. Otherwise a private queue will be used.
   - A global MSMQQueueInfo object is used to reference the sample's
      single queue.
   - Initialize OLE
   - Create a new completion port 
   - Create a bunch of threads with a generic CompletionPortThread start 
      routine parameterized with the completion port handle from the previous step.
   - Open the queue and associate its handle with the completion port:
       - note the queue is deleted and recreated if already exists
          otherwise a new queue is created.
       - in case the local computer is working in workgroup mode, a private
          queue is created. A public queue is created otherwise.
   - Enable a bunch of asynchronous message receive requests on the queue.
      Since the queue is associated with the completion port, each of these
      requests will result in the CompletionPortThread handler being notified
      asynchronously by NT when the async receive message "completes".
     - note that the NT scheduler will select the "best" available completion
        port thread that is synchronously waiting for a completion notification.
   - Finally, to test the completion port handlers, a bunch of messages is sent
       to the queue and the program hibernates.
   - To exit, just kill the console app window.


For More Information:
See the MSDN help for completion ports, especially: "Writing Scalable Applications for Windows NT"