2010-01-01 37 views
2

我試圖讓這個簡單的程序在Windows上工作,但它崩潰了:試圖在Windows上使用TCL線程7導致訪問衝突

 
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,靜態線程編譯,生成的庫的名稱爲tcl85tsx.lib。錯誤是:

 
Unhandled exception at 0x77448c39 in main.exe: 0xC0000005: Access violation writing location 0x00000014. 

Tcl庫工作得很好,我甚至可以通過加載線程擴展到它運行一個線程腳本示例。我的假設是,內存違規有可怕的錯誤,但我不知道是什麼。任何幫助讚賞。

+0

我建議:嘗試從Windbg啓動應用程序並查看堆棧跟蹤; – whunmr 2010-01-01 14:15:32

+0

您是否在另一個平臺上(或甚至是在不同版本的Windows上)測試了相同的代碼? – bta 2010-03-19 20:20:11

回答

2

TclInitSubsystems當您撥打Tcl_FindExecutable()時,會被調用,其中公開。如果您沒有可執行文件名稱,只需在其中傳遞NULL即可。

+0

非常有趣。謝謝。 – Juan 2010-12-24 18:21:40

1

我最終編譯了可調試版本的Tcl。問題是您需要調用TclInitSubsystems來初始化線程創建所需的所有鎖。不幸的是,這不是公開訪問的,並且需要使用Tcl_CreateInterp創建一個intepreter。這是一個我正在開發的應用程序的測試程序,它有一個Tcl解釋器,所以它不會成爲生產中的問題。我只需要爲這個簡單的測試程序創建一個解釋器。