Если вы используете Tcl_AppInitProc
для создания своих пользовательских команд, то только выполняется в главном потоке. Другие темы по умолчанию являются ванильными. Чтобы исправить это, нужно зарегистрировать пакет stati c во время выполнения Tcl_AppInitProc
, который затем вы можете load
специально в каждом потоке (при его создании), чтобы получить ваши собственные команды , (Вы бы лучше написали свои команды, чтобы быть потокобезопасными или привязанными к интерпретатору / независимостью от потоков c, но это ваша проблема.)
В частности:
int Tcl_AppInit(Tcl_Interp *interp) {
// Name is arbitrary, but needs to match [load] call in Tcl
Tcl_StaticPackage(interp, "myCustom", MyCustomPerThreadInit, NULL);
// Other main thread initialisation here
return TCL_OK;
}
int MyCustomPerThreadInit(Tcl_Interp *interp) {
// Register your worker thread commands here
return TCL_OK;
}
А затем в каждом потоке вы сначала делаете это:
load {} myCustom
Вы должны будете помнить, чтобы делать это и в вашем основном потоке, если вы хотите, чтобы эти команды были там. Или вы можете разделить свои команды на команды для основного потока и команды для рабочих. Ваш выбор.