Очистка очереди событий - PullRequest
0 голосов
/ 23 октября 2019

В моем расширении Tcl вторичный поток заполняет очередь событий Tcl событиями;события содержат указатели на структуры с динамическим временем жизни.

Какова правильная стратегия для обеспечения того, чтобы в очереди событий не осталось событий с висячими указателями на нераспределенные структуры? Я могу помешать вторичному потоку создавать новые события;в настоящее время я вызываю Tcl_DoOneEvent(TCL_DONTWAIT) в цикле до тех пор, пока она не вернет 0 (т. е. очередь событий пуста), убедившись, что новые события не могут быть созданы, и перед отменой выделения структуры.

Это правильный способ сделатьэто?

В соответствующей заметке я не уверен в цели Tcl_ThreadAlert(): если это необходимо после каждого вызова Tcl_ThreadQueueEvent(), почему предупреждение не включено в Tcl_ThreadQueueEvent()?

Наконец, мой код не вызывает Tcl_CreateEventSource(), так как не требуется ни настройки, ни процедуры проверки, поскольку задействован второй поток. Это повод для беспокойства?

1 Ответ

1 голос
/ 27 октября 2019

По первому пункту, мне кажется, это нормально. Это очень похоже на запуск update на уровне TCL.

Я не уверен насчет второго пункта, поскольку он не является частью API, который я много исследовал. Возможно, именно так можно запланировать несколько событий для одного уведомления или потому, что для вызова есть и другие варианты использования, но я действительно не знаю.

С третьей точки это звучит нормально. Я думаю, что вам никогда не нужны специальные источники событий для обмена сообщениями между потоками.

...