2010-09-27 106 views

回答

2

發生的事件放入傳遞給kevent調用的eventlist緩衝區中。因此,使這個緩衝區足夠大,會給你你正在尋找的名單。 kevent調用的返回 值會告訴您有很多事件 都在eventlist緩衝區中。

如果使用大緩衝區不是出於某種原因可行, 你總是可以做一個循環中調用kevent與零超時 和較小的緩衝區,直到你得到的EVENTLIST零個事件。

+0

雖然我不需要在kevent調用中傳遞文件描述符嗎?我想我需要更多地玩這個。 – clee 2010-09-27 17:55:36

+0

您可以使用'kevent'調用來註冊您對某種事件的興趣,以及檢索實際發生的事件。你可以在一次通話中將它結合起來,但你不需要。一旦你註冊了你對文件描述符的興趣,'kevent'將報告這個描述符的相關事件,除非你使用了'EV_ONESHOT',或者刪除了事件,或者關閉了描述符。 – Grrrr 2010-09-27 21:32:29

0

爲了讓多一點背景...

一個預期的情況與KEVENT()是你將線程池調用它。如果你有3個線程池都要求4個事件,操作系統希望能夠按照它認爲合適的方式彙集和分配實際事件。

如果有7個事件可用,操作系統可能想要分派到3個線程,或者如果它認爲它有空的內核和較少的開銷,它可能想分派到所有3個線程。

我並不是說你的方案根本無效;只是該系統或多或少的設計使信息遠離你,所以它沒有涉及說'好吧,12個描述符已準備就緒。哦,呃,我剛剛告訴過你,但其中有三個在你有機會做任何事情之前就已經浮出水面了。

Grrr幾乎釘住了這個場景。您可以註冊/取消註冊一次描述符,並在事件觸發時將相關描述符返回給您。

相關問題