skui學習筆記(二)模組分析

2021-10-01 09:12:18 字數 3513 閱讀 1507

skui分為幾個模組:

# skui itself

add_subdirectory(core)

add_subdirectory(css)

add_subdirectory(graphics)

add_subdirectory(gui)

add_subdirectory(opengl)

add_subdirectory(system)

目前example裡面例程用到的只有core、graphics、gui三個模組。

1、core

基本功能,包括訊號,屬性,字串,路徑,應用程式,作業系統抽象

c++和h++字尾的檔案作者是為了防止和其它檔案重名,這幾種字尾名沒有區別,如果編譯器支援的話,哪種字尾都是一樣的,在c++ primer上給出如下說明:

unix uses: c, cc, cxx, c

gnu c++ uses: c, cc, cxx, cpp, c++

digital mars uses: cpp, cxx

borland c++ uses: cpp

watcom uses: cpp

microsoft visual c++ uses: cpp, cxx, cc

metrowerks codewarrior uses: cpp, cp, cc, cxx, c++

: commandline_arguments

, name

implementation::instance = this;

} 提供方法獲取例項

return *implementation::instance;

} 呵,濃濃的c語言風格**布局。

event_loop類

用來處理事件迴圈

裡面一共有這幾個方法:execute、push、stop、interrupt

execute

int event_loop::execute()

}return exit_code;

}

push

void event_loop::push(command_queue::command_ptr&& command)

stop

void event_loop::stop(int return_code)

));}

interrupt

void event_loop::interrupt(int return_code)

));}

都是在對command_queue類操作

command類

在看command_queue類之前先看command類

裡面定義了乙個模板和屬性std::functionfunction

templatecommand(callable callable, argtypes... args)

: function}

{}std::functionfunction;

建立乙個 std::function 類的物件去捕獲 lambda 函式(有問題的可以看下匿名函式)

建構函式中把callable傳給function

command::command()

: function}

{}

方法execute中執行function

void command::execute()

command_queue類

用using實現別名,定義了乙個雙端佇列commands_type,裡面儲存的是command型別的智慧型指標,用來儲存渲染命令

using command_ptr = std::unique_ptr;

using commands_type = std::deque;

push:尾插新元素到deque

void command_queue::push(command_ptr&& command)

; queue.push_back(std::move(command));

condition_variable.notify_one();

}

void command_queue::push_front(command_queue::command_ptr&& command)

; queue.push_front(std::move(command));

condition_variable.notify_one();

}

wait:通過條件變數和互斥鎖等待

void command_queue::wait()

; if(queue.empty())

condition_variable.wait(lock, [this] );

}

take_commands:獲取queue並清空command_queue的屬性queue

command_queue::commands_type command_queue::take_commands()

; commands_type result;

std::swap(result, queue);

return result;

}

debug.h++

定義了log列印,加上了時間

inline void debug_print(argtypes... args)

library類

使用dlopen載入動態庫

load

bool library::load(path filename_to_load)

else

native_handle = implementation::load(filename.c_str());

return native_handle != nullptr;

}

unload

bool library::unload()

下面是有關c++實現訊號(signal)和槽(slot)的部分

trackable類

定義了乙個基類tracker,定義了trackable的刪除、拷貝、移動。

class tracker

;

下面是主角trackable

class trackable

;

unordered_set本質是使用hash雜湊的方式儲存資料,是一種使用hash值作為key的容器.

Verilog學習筆記(二) 模組

模組是 verilog 的基本描述單位,用於描述某個設計的功能或結構及其與其他模組通訊的外部埠。乙個設計的結構可使用開關級原語 門級原語和使用者定義的原語方式描述 設計的資料流行為使用連續賦值語句進行描述 時序行為使用過程結構描述。乙個模組可以在另乙個模組中使用。乙個模組的基本語法如下 module...

Node模組 學習筆記(二)

node的模組分為三大類 全域性模組 系統模組 自定義模組 demo示例 1.js console.log process.env if process.env.dev else console.log dirname 常用的系統模組 demo示例 1 path模組的示例 2.js let path...

資料分析 學習模組筆記

目錄 了解資料分析 業務理解與學習 分析基礎 統計學機器學習 資料庫技能 sqlhadoop hive 分析工具運用 python excel 筆試面試 業務理解與學習部落格 精益資料分析 書中筆記 本子筆記 區分定類 定序 定距 定比變數 假設檢驗 u檢驗 t檢驗 卡方檢驗 f檢驗 書 a4紙機器...