我正在一个与 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 进行警报调用。
tmsWinMailslot中有一个例子如果您查看 MailslotSignalledProc,它会从在此代码中监视 Windows 邮槽的工作线程引发 Tcl 事件。它使用 Windows 重叠 I/O,因此一旦某些数据在阻塞的 worker 上可用,此函数会读取并将其作为事件发布到 Tcl,然后再次开始读取以等待更多数据。
关于multithreading - 如何从非 tcl 线程异步调用 Tcl 线程中的命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26911729/