1. 程式人生 > >如何將非同步呼叫轉換成同步呼叫

如何將非同步呼叫轉換成同步呼叫

    上上篇文章演示瞭如何將非同步呼叫轉換為同步呼叫。本篇文章則演示了反過程。為何我們需要將非同步呼叫轉換為同步呼叫?這往往是為了獲得程式設計的便利性——前文說過非同步呼叫比較反人類。如果底層是非同步的,轉換為同步一般會損失效能。所以這種做法較少用於服務端,一般用於客戶端。
    如果是體位2的非同步,很簡單,反覆查詢直到OK即可,兩次查詢間sleep。一般sleep時間設定為可以容忍的延遲時間。sleep時間短,則響應快(但即使你設定為sleep(0)也不可能每秒抽插超過1000次),但是cpu負載也比較大。注意如果不sleep,cpu將跑滿,這可能導致工作執行緒更慢完成(想象下你讓某人做件事,然後在一旁不停地問好了沒好了沒),最好不要這麼做。
===============程式碼的分割線====================
#include <iostream>
#include <string>
#include <queue>
#include <boost/bind.hpp>
#include <boost/thread.hpp>
#include <windows.h>    //    只用到Sleep函式

using namespace std;

string somefuncMaybeBlock(){
    string str;
    getline(cin, str);
    return str;    //    如果是未採用隱式資料共享的std實現,這句話比較低效,但無妨,此例只是演示體位變換
}
class CheckMeLaterCaller{
public:
    class Result{
    public:
        Result()
            : ready_flag(false){
        }
        void setData(const string& res){
            boost::mutex::scoped_lock lock(mtx);
            result = res;
            ready_flag = true;
        }
        string getData(){
            boost::mutex::scoped_lock lock(mtx);
            return result;
        }
        bool ready(){
            boost::mutex::scoped_lock lock(mtx);
            return ready_flag;
        }
    private:
        string result;
        bool ready_flag;
        boost::mutex mtx;
    };
    void call(Result* result){
        boost::mutex::scoped_lock(mtx);
        queue.push(result);
        if (queue.size() == 1){
            cond.notify_all();
        }      
  

相關推薦

如何非同步呼叫轉換同步呼叫

    上上篇文章演示瞭如何將非同步呼叫轉換為同步呼叫。本篇文章則演示了反過程。為何我們需要將非同步呼叫轉換為同步呼叫?這往往是為了獲得程式設計的便利性——前文說過非同步呼叫比較反人類。如果底層是非同步的,轉換為同步一般會損失效能。所以這種做法較少用於服務端,一般用於客戶端。     如果是體位2的

非同步集合轉換同步集合

工具類方法 static <T> List<T>           返回指定列表支援的同步(執行緒安全的)列表。 static <K,V> Map<K,V>

c# 呼叫Microsoft XPS Document Writer印表機,Pdf檔案轉換Xps檔案

最近碰到個專案,其中有個需要將pdf檔案轉換成xps檔案的功能,xps檔案還算是新東西,所以基本沒啥瞭解,通過一段時間的調查, 本人算是找到了2個方法:   1)通過PDFNet第三發開發元件即可很容易的完成轉換功能,並且還有其他針對pdf檔案操作的功能,還是很強大的

C# 委託的三種呼叫示例(同步呼叫非同步呼叫非同步回撥)

首先,通過程式碼定義一個委託和下面三個示例將要呼叫的方法: 程式碼如下: public delegate int AddHandler(int a,int b); public class 加法類 { public static int A

oracle改進之阿拉伯數字轉換中文數字

replace 工作 漢字 spa bsp func ace 延展 char   本博客是自己在學習和工作途中的積累與總結。 將阿拉伯數字轉換成中文漢字,方法自定義函數      create or replace function formate(val in num

想要CAD圖轉換JPG圖片該怎麽操作

  CAD圖紙文件在各個行業基本都是會使用到的因為CAD圖紙文件的查看需要借助於專業的軟件進行查看,因此為了方便顧客進行查看,我們通過會將CAD圖轉換成JPG圖片,這樣就可以直接使用JPG圖片查看圖紙文件了。那麽應該使用什麽軟件,才能夠快速的將CAD圖轉換成JPG圖片?怎麽把CAD圖轉換成JPG圖片?

通過js時間戳轉換"yyyy--mm--dd"格式

urn 日期 var 格式 通過 () 方法 獲取 字段 在數據庫裏存的日期是date格式 java後臺封裝的類是的屬性字段是date類型 前臺通過ajax從後臺獲取數據,以json格式傳到前端,時間變成了時間戳的格式 解決方法是: function fmtDate(obj

阿拉伯數字轉換中文的php函數

ont enum pre == tin 函數 array light blog function toChinaseNum($num){ $char = array("零","一","二","三","四","五","六","七","八","九"); $dw

matlab 數字矩陣轉換圖像

之間 灰度 範圍 黑白 最好 沒有 imshow 原理 記錄 MATLAB中,常常使用imshow()函數來顯示圖像,而此時的圖像矩陣可能經過了某種運算。在matlab中,為了保證精度,經過了運算的圖像矩陣I其數據類型會從unit8型變成double型。如果直接運行imsh

C# 使用FileUpload控件上傳圖片,文件轉換二進制進行存儲與讀取

擴展 實現 bmi extension aaa 插入數據 問題 pup cat 狀況描述:   需要上傳文件,但是不想要保存到實體路徑下,便可以用該功能來實現。 效果圖:      點擊【Upload】按鈕,上傳文件到數據庫;   點擊【Preview】,預覽文件;

JavaScript小寫金額轉換大寫

cap i++ prefix ++ 轉換成 num tro 金額轉換 sna //num為小寫金額,單位元 changeMoney(num) { if(isNaN(num))return ""; var strPrefix="

如何VS2015工程轉換VS2012工程

version vs2008 orm 自定義 lld mtools pro 修改 wss 如何將VS2015工程轉換成VS2012工程修改.vcxproj,1.修改工具集 ToolsVersion=14.0 修改為 ToolsVersion=4.02.修改平臺工具集

javascript 中數組的創建 添加 與數組轉換字符串

rac ont 記錄操作 轉字符串 fir span TP CA new 創建js數組 var array=new Array(); Java中創建數組 private String[] array=new String[3]; 兩個完全不同的,js中是可變長度的 添

調用百度地圖開發平臺的JavascriptAPI實現市縣位置轉換坐標

json 2.7 func 技術分享 真的 工具 深圳市 tar () 最近的項目要做的地圖比較多,有的還比較復雜,而地圖用到的坐標,上網找json文件更是良莠不齊的。真是讓人傷腦筋,後來突然想到了百度地圖開發平臺,沒想到真的有對應的API哦,謝天謝地!!!下面說一下完整的

python 獲取整點時間戳,半整點時間戳 ,同時時間戳轉換 日期時間

%s bsp ray mktime timestamp 技術分享 取整 amp style import time, datetime def gettime(): for x in range(24): a = datetime.

如何CAD圖紙轉換彩色,只需幾步即可輕松搞定!

官網 -c 等待 輸出 href text RoCE 電腦桌 第一步 如何將CAD圖紙轉換成彩色,只需幾步即可輕松搞定!在日常的工作中,建築設計師們在編輯器完圖紙後,基本圖紙都是黑白的,這樣不利用我們更好的進行查看,那就需要將CAD圖紙的顏色進行轉換,如何將CAD圖紙轉換成

文件轉換byte[]數組

data cte pre eat ret pro readwrite access 轉換成 /// <summary> /// 將文件轉換成byte[] 數組 /// </summary> /// <param name="fileUrl"&g

怎樣圖片格式轉換PDF格式?

電腦中儲存的圖片轉換成PDF格式該如何進行操作呢?下面就這個問題小編就將自己所知道的轉換方法告訴大家!1、首先可以將轉換成PDF格式的圖片儲存在一份新建的新資料夾中。2、接下來就可以藉助電腦端的PDF轉換軟體進行操作了。不過前提是電腦中要有PDF轉換器,沒有的話大家自行去下載。這個就不用小編教大家了吧!3、電

怎麼手機錄音轉換文字

職場朋友的福利來了,特別是需要做會議記錄、新聞記者或者是經常需要開電話會議的朋友們,很多時候需要將錄音檔案轉換為文字然後儲存到Word裡。那大家是怎麼做的呢?我不信有人是一個字一個字的敲到Word裡的,這樣簡直是太浪費時間了,小編今天在這裡告訴大家一個解放雙手的方法,一起來看看吧。操作方法:1.首先在手機的應