ACE Tutorial 014
ACE_Stream Tutorial, Of Sorts

You find pretty soon that anytime you work with ACE_Task<> you have to create a derivative. The Task.h header simply provides that derivative with the overrides we'll need in our application.

    // page02.html,v 1.10 2001/12/24 20:51:05 schmidt Exp

    // Task.h
    //
    // Tutorial regarding a way to use ACE_Stream.
    //
    // written by bob mcwhirter (bob@netwrench.com)

    #ifndef TASK_H
    #define TASK_H

    #include <ace/Task.h>
    #include <ace/Synch.h>

    // Always typedef when possible.

    typedef ACE_Task<ACE_MT_SYNCH> Task_Base;

    class Task : public Task_Base
    {
    public:
      typedef Task_Base inherited;
      // This is just good form.

      Task (const char *nameOfTask,
            int numberOfThreads);
      // Initialize our Task with a name, and number of threads to spawn.

      virtual ~Task (void);

      virtual int open (void *arg);
      // This is provided to prevent compiler complaints about hidden
      // virtual functions.

      virtual int close (u_long flags);
      // This closes down the Task and all service threads.

      virtual int put (ACE_Message_Block *message,
                       ACE_Time_Value *timeout);
      // This is the interface that ACE_Stream uses to communicate with
      // our Task.

      virtual int svc (void);
      // This is the actual service loop each of the service threads
      // iterates through.

      const char *nameOfTask (void) const;
      // Returns the name of this Task.

      static ACE_Lock_Adapter<ACE_SYNCH_MUTEX> *lock_adapter (void);
      // Returns a pointer to the lock adapter.

    private:
      int d_numberOfThreads;
      char d_nameOfTask[64];

      ACE_Barrier d_barrier;
      // Simple Barrier to make sure all of our service threads have
      // entered their loop before accepting any messages.

      static ACE_Lock_Adapter<ACE_SYNCH_MUTEX> lock_adapter_;
      // This Lock_Adapter is used to synchronize operations
      // on the ACE_Message_Block objects
    };

    #endif /* TASK_H */

[Tutorial Index] [Continue This Tutorial]