C 跨執行緒處理同步 非同步訊息

2021-10-02 02:02:30 字數 932 閱讀 7419

為了不阻塞主線程,將主線程發過來的命令處理為不同的事件,放到另乙個執行緒去執行,包括同步和非同步處理。

注:同乙個程序,多執行緒。

為了保證執行緒間的共享資源保護以及執行緒間的訊息機制,用到了下面幾個系統庫資源:

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在乎的是把某件事情傳達出去就可以,而不必在乎其他人的狀態,比如張貼告示也是這樣,不需要知道每個人都是否知道這則告示的內容,...

多執行緒 執行緒同步 非同步

同步和非同步 同步和非同步通常用來形容一次方法的呼叫。同步方法呼叫一旦開始,呼叫者必須完成所有的操作一直到方法呼叫結束,其他呼叫者才能繼續後續的行為,非同步方法呼叫類似乙個訊息傳遞,一旦開始,方法呼叫就會立即返回,其他呼叫者則可以無需等待,可以立即繼續後續的操作。非同步 不過,如果 我們 趕時髦,就...

執行緒同步和非同步

執行緒同步和執行緒非同步有什麼區別?重要基礎知識 打個比方,如果你在等乙個人,同步的時候,你會一直等到她來了之後才做其他事情,這個過程除了等待你啥都不會做,非同步的時候,你一邊在等,可能一邊玩遊戲或者是看報紙什麼的,一直到她到來,你的等待狀態才會結束 在實現上,同步的過程會阻塞程序的所有其他操作,將...