我正在使用Tcl。並使用swig擴展TCL命令。現在,我想讓C中的擴展命令回調tcl過程。 但我不知道。如何從c調用回調tcl程序
請幫幫我。
首先,我在swig中實現了一個調用mrecv的調度器函數。 並在我的tcl腳本。我打電話給mrecv接收消息。所以,當一條消息到達時,我希望tcl可以通過mrecv來通知。那爲什麼我需要找到一種方法來調用c中的回調tcl過程。
我的代碼是breifly是
W16 mrecv(int timeout) {
W16 res;
Msg_t *msg = NULL;
APP_EVENT_T eventList[255];
int listLength = 255;
while (1) {
readAgain = 0;
msg = malloc(sizeof(Msg_t));
if (!msg) {
return RETURN_ERR;
}
memset(msg, 0, sizeof(Msg_t));
res = MsgRecvEvent(msg, eventList, &listLength, timeout);
if (res == RETURN_OK) {
msgDispatcher(msg);
}
free(msg);
}
return res;
}
void msgDispather(void *msg) {
/*notify tcl*/
}
,在我的TCL腳本。我打電話給mrecv命令。 TCL腳本:
res [ mrecv 3000 ]
我需要知道如何通知TCL。
以下是我的測試演示。
int testCallback (char * str) {
Tcl_Interp *interp;
interp=Tcl_CreateInterp();
Tcl_Eval(interp,str);
return 0;
}
testCallback()是將由tcl調用的擴展cmd。 str是tcl中的過程名稱。
你能讓你的問題更具體嗎?這對於目前的StackOverflow來說有點過於寬泛。到目前爲止你嘗試了什麼,你卡在哪裏? – starsplusplus
你真的不想經常創建口譯員(他們是重量級的),他們不是垃圾收集。您也可能想要使用現有的,以便用戶可以在實際處理回調之前進行設置... –