Re: [問題] 請教簡單問題 TCL 與 .cc 關係

作者: kivava (天空快快黑)   2011-06-15 21:53:03
※ 引述《sysrq (從零開始)》之銘言:
: ※ 引述《sysrq (從零開始)》之銘言:
: : 標題: [問題] 請教簡單問題 TCL 與 .cc 關係
: : 時間: Wed Jun 1 18:28:18 2011
: : 請教一個簡單問題.
: : 在 tcl 中有以下的 code,
: : set peer($i) [new PeerApp/GnutellaApp $nodeid 0 0]
: : 請問在 .cc 中 GnutellaApp , 傳入三值的 $nodeid, 0, 0 該如何找到?
: : 我試著找了 .cc code 中的 function, 沒有找到類似有三個 input 的地方.
: : 最類似的僅有
: : GnutellaApp::GnutellaApp(NodeAddr_t addr): PeerApp(addr) {
: : 但裡面參數只有一個(NodeAddr_t addr).
: : 請問我的觀念, 或是我找的方法有什麼錯誤嗎?
: : 誠心請教.
: : → kivava:這是tclcl的參數傳遞,要找TclClass或/lib下的.tcl指令 06/01 20:35
: 謝謝 kivava 回答.
: 後來查了一下 .cc,
: 有找到 TclClass
: static class GnutellaAppClass: public TclClass {
: public:
: GnutellaAppClass(): TclClass("PeerApp/GnutellaApp") {}
: TclObject* create(int argc, const char*const* argv) {
: return (new GnutellaApp(atoi(argv[4])));
: }
: }class_gnutellaapp;
: 黃色字體應該就是 set peer($i) [new PeerApp/GnutellaApp $nodeid 0 0]
: 中 PeerApp/GnutellaApp 的對應部份,
: 不過我還是不清楚 $nodeid 0 0 三個變數是傳到 .cc 的哪裡???
: 請問是以下的 code 的位置嗎?
: GnutellaApp::GnutellaApp(NodeAddr_t addr): PeerApp(addr) {
: ping_timer_ = new PingTimer(this);
: watchDog_ = new WatchDog(this);
: isBootserver_ = FALSE;
: ping_interval_ = PING_INTERVAL;
: watch_interval_ = CONN_INTERVAL;
: max_deg_ = MAX_DEGREE;
: bind("isBootserver_", &isBootserver_);
: bind("max_deg_", &max_deg_);
: bind("isWireless_", &isWireless_);
:
: :
: :
bind 的參數是直接設定在 tcl/lib/ns-defaults.tcl ,不需要用參數傳遞的方式傳進
constructor
如果你會用 gdb 的話,可以試著追一下建立的流程,並且 print
return (new GnutellaApp(atoi(argv[4]))); 中的 argv[4] 之值
看看是不是跟 GnutellaApp::GnutellaApp(NodeAddr_t addr): PeerApp(addr) {
的 addr 之值相同

Links booklink

Contact Us: admin [ a t ] ucptt.com