C 跨平台事件機制實現

2022-07-16 06:03:08 字數 1577 閱讀 7328

今天看到有人在討論c++標準沒有提供類似作業系統層次的事件通知機制,如windows的事件核心物件。其實我想說的事,c++11標準裡的互斥量及條件變數已經夠幫我們實現類似的功能了。

剛編寫了乙個事件通知類新鮮出爐,供大家把玩一下,一起學習併發執行緒的編寫。寫的有不好的地方,請一定要不吝惜指出來,我會改正,謝謝!

#include "event.hpp"

event my_event;

void threadproc3()

void threadproc4()

int main()

t1.join();

t2.join();

return 0;

}輸出結果:

完整**:

//

event.hpp

#ifndef event_include

#define event_include#include

#include

#include

//利用c++11的鎖與條件變數實現跨平台的事件通知機制

class

event

void

wait()

std::unique_lock

_lock(_mutex);

_var.wait(_lock);

_state = false

; }

template

bool wait_for(t&&t)

std::unique_lock

_lock(_mutex);

std::cv_status::cv_status re = _var.wait_for(_lock,std::forward(t));

if (re!=std::cv_status::cv_status::timeout)

return

false

; }

template

bool wait_util(t&&t)

std::unique_lock

_lock(_mutex);

std::cv_status::cv_status re = _var.wait_until(_lock,std::forward(t));

if (re!=std::cv_status::cv_status::timeout)

return

false

; }

void

notify_all()

void

notify_once()

private

:

event(const

event&);

event& operator=(const

event&);

event(event&&);

protected

: std::mutex _mutex;

std::condition_variable _var;

std::atomic

_state; //

件事的狀態

};#endif

C 實現跨平台

要建立乙個c 跨平台的應用,亦難也易。難在什麼?所謂應用,自是實際應用,牽涉面很廣。一般來說,至少有如下幾個方面需要我們考慮 0.語言及基礎庫 1.作業系統相關的 2.網路 3.資料庫 4.介面 其它自然還有很多,如xml,加解密等等,這裡先討論前面列出的幾項。眾所周知,不同的作業系統即時是相同的函...

C 事件機制實現

事件是面向元件開發的必要特性之一,但c 不直接支援事件,沒關係,我自己實現了乙個,感覺很好用,分享給大家!最開始打算用函式指標模擬事件,但由於c 中成員函式指標不能和void 相互強轉,而且 typedef中不能含有模板,所以才不得已以介面繼承實現。這樣效果也不錯 一.先看看事件介面定義和實現 上面...

Unity跨平台的機制原理

首先需要了解的是,unity3d的c 基礎指令碼模組是通過mono來實現的。什麼是mono?它基於cil和c 的ecma標準,提供了了微軟.net framework的另一種實現。mono主要有以下部分組成 c 編譯器 mcs。最新的mono版本已經可以支援c 5.0,但unity3d的mono版本...