我正在使用与Tcl解释器无关的C线程(我使用pthreads)做一些工作。它拥有指向现有Tcl线程的ThreadId和TclInterp的指针,并希望将脚本发送到此Tcl线程以进行异步求值。
我可以同步使用XThreadUtil并且只有在C线程完成执行之前阻塞Tcl线程。我真的需要异步行为。也就是说,所需的事件序列是:
我尝试过使用Tcl线程通知API(Tcl_ThreadQueueEvent / Tcl_ThreadAlert)和异步API(Tcl_AsnycCreate / Tcl_AsyncMark),运气不佳。我还没有找到很多例子。非常感谢任何帮助。
答案 0 :(得分:3)
Tcl_ThreadQueueEvent和Tcl_ThreadAlert是我过去使用过的。您需要使用Tcl_GetCurrentThread记住警报调用的Tcl主线程的线程ID。
如果您查看MailslotSignalledProc,tmsWinMailslot中有一个示例,它会从正在监视此代码中的Windows邮件槽的工作线程引发Tcl事件。它使用Windows重叠I / O,因此一旦一些数据在被阻止的工作者上可用,该函数会读取并将其作为事件发布到Tcl,然后再次开始读取以等待更多数据。