為了不阻塞主線程,將主線程發過來的命令處理為不同的事件,放到另乙個執行緒去執行,包括同步和非同步處理。
注:同乙個程序,多執行緒。
為了保證執行緒間的共享資源保護以及執行緒間的訊息機制,用到了下面幾個系統庫資源:
std::mutex
std::unique_lock
std::conditional_variable
1、訊息 結構體 和 事件
enum op
;//最重要的是operation和issynccmd, 其它的都是傳參,選填。
struct command
;
2、新增訊息
void postcommand(const command& cmd)
}
3、處理訊息
void msgprocessloop()
mwakesignal.wait(lock);//訊息處理完成之後,釋放鎖,並進入睡眠狀態}}
}void processevent(const command& cmd)
if (cmd.issynccmd)
}
4、使用
主線程通過呼叫postcommand往事件佇列裡面新增新的事件。eg:
void dotaska()
; postcommand(cmd);
}
然後,另外起乙個thread,執行msgprocessloop().
如果是同步事件,就 將 issynccmd置為true 即可, 這種情況下postcommand就不會立即返回,而是等待事件處理完成之後才會返回。
同步訊息和非同步訊息
同步訊息和非同步訊息區別 兩者使用場景不一樣,比如說a給b傳送一封電子郵件,a是不需要知道b是否收到就可以了的,把自己的資訊傳達出去,這樣的場景就是非同步訊息。因為在這個過程中a在乎的是把某件事情傳達出去就可以,而不必在乎其他人的狀態,比如張貼告示也是這樣,不需要知道每個人都是否知道這則告示的內容,...
多執行緒 執行緒同步 非同步
同步和非同步 同步和非同步通常用來形容一次方法的呼叫。同步方法呼叫一旦開始,呼叫者必須完成所有的操作一直到方法呼叫結束,其他呼叫者才能繼續後續的行為,非同步方法呼叫類似乙個訊息傳遞,一旦開始,方法呼叫就會立即返回,其他呼叫者則可以無需等待,可以立即繼續後續的操作。非同步 不過,如果 我們 趕時髦,就...
執行緒同步和非同步
執行緒同步和執行緒非同步有什麼區別?重要基礎知識 打個比方,如果你在等乙個人,同步的時候,你會一直等到她來了之後才做其他事情,這個過程除了等待你啥都不會做,非同步的時候,你一邊在等,可能一邊玩遊戲或者是看報紙什麼的,一直到她到來,你的等待狀態才會結束 在實現上,同步的過程會阻塞程序的所有其他操作,將...