簡體   English   中英

pthreads:在主線程上執行 function

[英]pthreads: perform function on main thread

我正在尋找可可的類似物

-[NSObject performSelectorOnMainThread: withObject: waitUntilDone:]

方法。

所以基本上我有一個 function 在一個單獨的線程上做一些工作,但它必須執行一些需要在主線程上執行的同步調用。

在 cocoa 中,消息被添加到運行循環中,作為其迭代的一部分被清除。

模擬這個:

  • 你會想要一個運行循環
  • 一個抽象的消息系統
  • 和引用計數機制(在大多數情況下)
  • 一種將這些消息添加到運行循環以進行計划執行的方法

計時器將是一個不錯的補充

要專門使用 pthread 接口完成類似的事情,首先要閱讀條件pthread_cond_t

我知道您要完成的工作沒有具有 1-1 關系的 pthread 接口。 條件也可以在沒有運行循環的情況下運行,因此如果您不重用運行循環實現,您可能需要將其帶到桌面上。 如果您使用運行循環,那么您只需要一個鎖即可將消息添加到具有運行循環的線程。

pthreads 是一個非常低級的抽象,因此使用原始 pthreads 沒有簡單的方法來做到這一點。 通常,您需要寫入文件描述符以喚醒主線程上的事件循環,然后將指針傳遞給您要運行的 function。 您甚至可以將指針值寫入pipe() ,然后讓主線程執行它們。

要同步等待,您可以簡單地使用互斥鎖和條件變量,以及這些執行請求對象上的完成標志。 讓子線程等待 mutex/condvar/completion 標志,然后在主線程中(在 mutex 下)設置標志並向 cvar 發出信號。 請求結構的清理將在孩子中完成。

更具體地說,如果您能提及您在主線程上運行的事件循環,將會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM