今天看到有人在討論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版本...