2

我试图让这个简单的程序在 Windows 上运行,但它崩溃了:

无符号 (__stdcall testfoo)(ClientData x)
{
    返回0;
}

主函数()
{
  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。错误是:

main.exe 中 0x77448c39 处的未处理异常:0xC0000005:访问冲突写入位置 0x00000014。

Tcl 库工作正常,我什至可以通过将 Thread 扩展加载到其中来运行线程脚本示例。我的假设是内存违规存在严重错误,但我不知道是什么。任何帮助表示赞赏。

4

2 回答 2

2

TclInitSubsystems调用时调用Tcl_FindExecutable(),这公开的。如果您手头没有可执行文件名,只需在此处传递 NULL 即可。

于 2010-03-25T16:34:20.290 回答
1

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

于 2010-01-02T01:38:53.363 回答