…あれ?
自分の理解では、これで合ってるはずなんですが…

スレ汚し失礼。

----------

#include <stdio.h>
#include <unistd.h>
#include <tcl.h>

static Tcl_AsyncHandler async_handle;

static int proc_finished(ClientData clientData, Tcl_Interp *interp, int code)
{
Tcl_SetVar2Ex(interp, "bg_stat", NULL, Tcl_NewIntObj(1), TCL_LEAVE_ERR_MSG);
printf("bg_stat has been set to 1.\n.");
return code;
}

Tcl_ThreadCreateType threaded_proc(ClientData clientData)
{
sleep(5);
Tcl_AsyncMark(async_handle);
}

static int asynctestHandleProc(ClientData data, Tcl_Interp* interp, int objc, Tcl_Obj* CONST objv[])
{
Tcl_ThreadId idPtr;
Tcl_CreateThread(&idPtr, threaded_proc, NULL, TCL_THREAD_STACK_DEFAULT, TCL_THREAD_JOINABLE);
return TCL_OK;
}