第一篇: vscode原始碼分析【一】從原始碼執行vscode
第二篇:vscode原始碼分析【二】程式的啟動邏輯,第乙個視窗是如何建立的
第三篇:vscode原始碼分析【三】程式的啟動邏輯,效能問題的追蹤
第四篇:vscode原始碼分析【四】程式啟動的邏輯,最初建立的服務
once(lifecycleservice.onwillshutdown)(() => (configurationservice as configurationservice).dispose());
上面這句話語義好直白呀!一旦lifecycle裡發生了willshutdown的事件,就執行後面的**函式!
那我們看看lifecycle裡的這個onwillshutdown(src\vs\platform\lifecycle\electron-main\lifecyclemain.ts)
private readonly _onwillshutdown = this._register(new emitter());
readonly onwillshutdown: event= this._onwillshutdown.event;
發現它是被_register註冊的,這個檔案裡並沒有_register函式,函式在它的父類disposable裡(src\vs\base\common\lifecycle.ts)
我一直以為這是資源釋放的類,沒想到還有事件相關的內容,哈!
private readonly _store = new disposablestore();
protected _register(t: t): t
return this._store.add(t);
}
看來,還得看disposablestore的add方法:
public add(t: t): t
if ((t as any as disposablestore) === this)
marktracked(t);
if (this._isdisposed) else
return t;
}
marktracked這個方法不用管,裡面什麼也沒乾!
_todispose就是個set,用來存你傳入的事件的;
另外,這個函式有個特別之處,就是你喂了它什麼它就拉了什麼出來!
因為我們喂了它乙個emitter的例項,那我們就去看看emitter(src\vs\base\common\event.ts)
這是個泛型型別
有個get屬性:
get event(): event
didcall = true;
return result;
} as any as t;
}
很好理解,傳入乙個方法,返回乙個方法,
我們知道,我們傳入的是:
lifecycleservice.onwillshutdown
前面我們說了,它確實是乙個方法;
這個once還返回了乙個匿名函式;
我們通過這個匿名函式,把我們的事件處理邏輯,繫結給了:lifecycleservice.onwillshutdown
這是繫結的關鍵**:
ok!我們再去看那個this._event返回的方法具體幹了啥?!
傳入的引數,listener是我們的匿名**函式
() => (configurationservice as configurationservice).dispose()
emitter例項的_listeners屬性已經在別處初始化成了linkedlist的例項;
const remove = this._listeners.push(!thisargs ? listener : [listener, thisargs]);
這句話把我們的匿名**函式加到這個linkedlist中去了
好,以上是繫結事件,
我們再來看看這個事件被觸發的時候是怎樣的
this._onwillshutdown.fire(
}});
在這個fire方法中:
for (let iter = this._listeners.iterator(), e = iter.next(); !e.done; e = iter.next())
while (this._deliveryqueue.size > 0) else
} catch (e)
}
迴圈派發了所有註冊的事件 mosquitto原始碼分析(五)
本文由逍遙子撰寫,請標註原址 3.2.1 poll機制簡介 poll機制是一種i o多路轉接 i o multiplexing 技術,這種技術先構造乙個有關描述符的表,然後呼叫乙個函式,知道這些描述符中的乙個已準備就緒好進行i o時,該函式才返回,該函式返回之後它告訴程序那些描述符已經準備好進行i ...
mosquitto原始碼分析(五)
原 2014年03月18日 16 02 52 更多個人分類 linux 計算機網路 mqtt mosquitto c c 所屬專欄 mqtt協議及其應用 計算機網路 本文由逍遙子撰寫,請標註原址 3.2.1 poll機制簡介 poll機制是一種i o多路轉接 i o multiplexing 技術,...
uC OS II原始碼分析(五)
每個任務被賦予不同的優先順序等級,從0 級到最低優先順序os lowest pr1o,包括0 和 os lowest pr1o 在內。當 c os 初始化的時候,最低優先順序os lowest pr1o 總是被賦給空閒任務idle task 注意,最多工數目os max tasks 和最低優先順序數...