Hey, I have a class that wraps a process and implements two events. One of them is called after poll() for example if new data are available.

The event is called correctly but I don't know how exactly how to read the data:

- per buffer of fixed size ?
- using the stream information ?

If i try to read until nothing is available anymore, the event handler returns at the end of the process (instead of being called several times): eg this helper function of the process that the event handler can call to read:


    bool readOutput(T)(ref T t)
    if (isSomeString!T)
    {
        bool result;
        T buffer;
        while (true) // or (!output.eof)
        {
            auto cnt = output.readln(buffer);
            if (cnt)
            {
                t ~= buffer;
                result = true;
            }
            else break;
        }
        return result;
    }


the events are called in the callback of a thread-based timer:


    void check(Object notifier)
    {
        if (_ppid.stdout.eof)
        {
            _checker.stop; // the thrad-based timer
            if(_onTerminate)
                _onTerminate(this);
        }
        else
        {
// not sure if something else must be done to poll properly ?
            pollfd pfd = { _ppid.stdout.fileno, POLLIN };
            if (poll(&pfd, 1, 0) == 1 && _onOutputBuffer)
_onOutputBuffer(this); // the handler can call readOutput
        }
    }

There should be a way to know how many bytes are available ?

Reply via email to