Dab*_*abo 4 multithreading asynchronous tcl
我正在一个与 Tcl 解释器无关的 C 线程(我正在使用 pthreads)中做一些工作。它拥有指向现有 Tcl 线程的 ThreadId 和 TclInterp 的指针,并希望向该 Tcl 线程发送脚本以进行异步评估。
我可以使用XThreadUtil同步执行此操作,并且仅当我阻塞 Tcl 线程直到 C 线程完成执行时。我真的需要异步行为。也就是说,所需的事件序列是:
我尝试过使用 Tcl 线程通知 API (Tcl_ThreadQueueEvent/Tcl_ThreadAlert) 和异步 API (Tcl_AsnycCreate/Tcl_AsyncMark),但运气不佳。我一直没能找到太多的例子。任何帮助深表感谢。
Tcl_ThreadQueueEvent和 Tcl_ThreadAlert 是我过去使用过的。您需要记住 Tcl 主线程的线程 ID,以便使用 Tcl_GetCurrentThread 进行警报调用。
如果您查看MailslotSignaledProc,在tmsWinMailslot 中有一个示例,它从在此代码中监视 Windows 邮槽的工作线程引发 Tcl 事件。它使用 Windows 重叠 I/O,因此一旦某些数据在阻塞的 worker 上可用,此函数会读取并将其作为事件发布到 Tcl,然后再次开始读取以等待更多数据。