我正在尝试让这个简单的程序在Windows上运行,但它崩溃了:
unsigned (__stdcall testfoo)(ClientData x) { return 0; } int main() { Tcl_ThreadId testid = 0; Tcl_CreateThread(&testid, testfoo, (ClientData) NULL, TCL_THREAD_STACK_DEFAULT, TCL_THREAD_NOFLAGS); }
我正在使用由cmake生成的makefile并链接到我使用Visual C ++ 2008 express编译的Tcl 8.5.7版本。它是使用msvcrt,static,threads编译的,结果库的名称是tcl85tsx.lib。错误是:
Unhandled exception at 0x77448c39 in main.exe: 0xC0000005: Access violation writing location 0x00000014.
Tcl库工作正常,我甚至可以通过将Thread扩展加载到其中来运行线程脚本示例。我的假设是内存违规有一些可怕的错误,但我不知道是什么。任何帮助表示赞赏。
答案 0 :(得分:2)
TclInitSubsystems
时会调用 Tcl_FindExecutable()
, 是公开的。如果您没有可执行文件名,请在那里传递NULL。
答案 1 :(得分:1)
我最终编译了一个可调试的Tcl版本。问题是您需要调用TclInitSubsystems来初始化线程创建所需的所有锁。不幸的是,这不是公开可访问的,需要使用Tcl_CreateInterp创建一个解释器。这是我正在开发的具有Tcl解释器的应用程序的测试程序,因此它不会成为生产中的问题。我只需要为这个简单的测试程序创建一个解释器。