Listing 3: A sample test program

#include <windows.h>
#include <stdio.h>
#include "ActiveQueue.h"
#include <string>

using namespace std;

#if _MSC_VER
// VC can only handle symbols up to 255 character, STL can easily
// produce symbols longer then that. So we turn of this warning.
#pragma warning(disable:4786)
#endif

class MyActiveQueue : public ActiveQueue<string>
{
protected:
    virtual bool HandleData(string &data);
};

bool MyActiveQueue :: HandleData(string &data)
{
    if (data == "end")
        return false;
    printf("%s\n",data.c_str());
    return true;
}

int main(void)
{
    char buffer[10];

    try
    {
        MyActiveQueue qt;

        for (int i = 0;i < 50;i++)
        {
            sprintf(buffer,"%d",i);
            qt.Add(string(buffer));
        }
        qt.Add("end");
        WaitForSingleObject(qt,INFINITE);
    }
    catch (FailedToCreateThread&)
    {
        printf("Failed to create thread\n");
    }
    catch (FailedToCreateSemaphore&)
    {
        printf("Failed to instansiate MyQueueThread\n");
    }
    return 0;
}
//End of File