[Issue 14953] New: std.concurrency: Add function to flush message box

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Mon Aug 24 02:35:37 PDT 2015


https://issues.dlang.org/show_bug.cgi?id=14953

          Issue ID: 14953
           Summary: std.concurrency: Add function to flush message box
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: phobos
          Assignee: nobody at puremagic.com
          Reporter: wendlec at tcd.ie

This enhancement request was inspired by this thread:

http://forum.dlang.org/post/yavfidlhfohqfziqvkzr@forum.dlang.org

The scenario:
A thread has several items in the message box, and the user wants to cancel not
just the current operation but flush the thread's message box, since the items
in the message box are no longer relevant.

The current behavior is that the thread insists on processing all items in the
message box. To suppress the thread from doing actual work, John Colvin
proposed this workaround:

void flushMailbox()
{
    bool r;
    do
    {
        r = receiveTimeout(Duration.zero, (Variant _){});
    } while(r);
}

In this way, the thread loops over each item in the message box, but does
nothing - until the message box is empty.

However, it would be more efficient to have a library function that empties the
message box immediately, instead of looping over the message box, cancelling
each item individually, before new input can be processed.

--


More information about the Digitalmars-d-bugs mailing list