前言
在1中,我們實作了一個基礎的signal+slot的子產品件調用機制,不過那個direct調用,在這篇中,我們将支援誇線程調用,即在對象的線程上下文中,調用對象的函數。
對象線程綁定
在qt中,有一個很重要的概念,對象線程綁定,即在每個對象執行個體時候,其儲存其線程上下文資訊,其中就有一個事件循環,跨線程的信号就是将這個一個task丢到這個事件循環中,在對象綁定的線程中完成slot響應。
實作
對slot調用的打包-Task
我們需要将一個跨線程的slot調用打包成一個task,然後丢到想相應的事件循環中。在事件循環中需要維護一個task隊列,那第一還是需要做容器。
struct TaskBase
{
virtual ~TaskBase() = ;
virtual void run() = ;
};
TaskBase::~TaskBase()
{
}
TaskBase
為我們Task基類,在事件循環中,維護其一個連結清單。
我們繼承它,實作我們第一個Tas