尝试在Windows 7上使用tcl线程会导致访问冲突

时间:2010-01-01 06:17:58

标签: windows-7 tcl access-violation

我正在尝试让这个简单的程序在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扩展加载到其中来运行线程脚本示例。我的假设是内存违规有一些可怕的错误,但我不知道是什么。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

当您致电TclInitSubsystems时会调用

Tcl_FindExecutable() 是公开的。如果您没有可执行文件名,请在那里传递NULL。

答案 1 :(得分:1)

我最终编译了一个可调试的Tcl版本。问题是您需要调用TclInitSubsystems来初始化线程创建所需的所有锁。不幸的是,这不是公开可访问的,需要使用Tcl_CreateInterp创建一个解释器。这是我正在开发的具有Tcl解释器的应用程序的测试程序,因此它不会成为生产中的问题。我只需要为这个简单的测试程序创建一个解释器。