简体   繁体   中英

Event queue cleanup

In my Tcl extension, a secondary thread is filling the Tcl event queue with events; the events contain pointers to structures with a dynamic life time.

What is the right strategy for ensuring that no events with dangling pointers to de-allocated structures remain in the event queue? I can prevent the secondary thread from creating new events; currently I call Tcl_DoOneEvent(TCL_DONTWAIT) in a loop till it returns 0 (ie, event queue is empty) after ensuring no new events can be created and before de-allocating the structure.

Is that the right way to do it?

On a related note, I am unsure of the purpose of Tcl_ThreadAlert() : if this is needed after every call to Tcl_ThreadQueueEvent() , why isn't the alert included in Tcl_ThreadQueueEvent() ?

Finally, my code does not call Tcl_CreateEventSource() , since it doesn't seem to be needing a setup nor a check procedure as a second thread is involved. Is that cause for concern?

On the first point, that seems OK to me. It is very much like running update at the TCL level.

I'm not sure about the second point, as it isn't part of the API that I have explored a lot. It might be that way to allow multiple events to be scheduled per notification, or because there are other uses for the call, but I really don't know.

On the third point, it sounds fine. I think you never need special event sources just to do inter-thread messaging.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM