【发布时间】:2017-11-30 09:59:59
【问题描述】:
我的 C++ 应用程序嵌入了 TCL (8.6.7),需要同时通过 Windows 命名管道 (dll) 和 TCP 套接字 (TCL 脚本) 获取数据。我想使用TCL线程通过管道和套接字实现同时数据采集。通过 TCL C api 的一个线程 (threadPipe) 将管理从命名管道读取的数据,而通过 TCL 脚本 (threadTclSocket) 的另一个线程将管理套接字。主线程(C++ 应用程序)通过 TCL 脚本启动数据采集,并在其 TCL 脚本中使用 vwait forever 等待(非阻塞)工作线程。
我的问题:
- 如何获取 TCL C 线程 (threadPipe) 和通过 TCL 脚本 (threadTclSocket) 的线程来设置变量:主应用程序的
forever当它们完成以便主线程可以退出其事件循环? - 我读过
Tcl_ThreadQueueEvent和Tcl_ThreadAlert,但我不明白它们如何用于在主线程中设置变量forever。
任何建议将不胜感激。
【问题讨论】:
-
您可以使用 twapi 扩展在 Tcl 中使用命名管道。
-
@JohannesKuhn 谢谢,命名管道已经实现为 dll。
-
通常的习惯用法类似于
while {$waitcount < 2} {vwait waitcount},并在其他线程完成时增加变量waitcount。 -
谢谢@JohannesKuhn。我目前的困难是如何让 TCL C 线程调用来设置变量
waitcount并将控制权返回给主 TCL 解释器。在设置TCL_EventProc中的变量后,它似乎挂起。 -
每个线程完成后,应该使用
Tcl_ThreadQueueEvent在使用Tcl_Eval和incr ::waitcount的主线程中排队一个事件。
标签: tcl