失敗則重複動作的模板方法

2022-07-02 20:24:06 字數 860 閱讀 1769

在實際專案中,經常碰到這種情況:對某些配置僅設定(或傳送)一次的話,可能會失敗,所以想在失敗時多嘗試幾次。

如果乙個專案裡涉及好幾個不同的裝置,他們用多種不同的設定(或傳送)方法時,往往就會寫很多相似的函式,這個時候模板就派上用場了。

話說正題,怎麼寫乙個失敗則重**送n次的模板方法呢?如下(linux環境中):

說明:上面就是乙個失敗時最多重**3次的模板方法;

即可能的裝置t有乙個傳送方法send_your_func(...),當其返回》0時則表示傳送成功,此時不用再嘗試了;否則會最多重複3次到成功為止,或最終仍是失敗;當成功時它也返回》0的值。

注意t的傳送方法send_your_func只是乙個標識(佔位),呼叫時填實際的傳送函式,雖然send_your_func只是乙個標識,但是判斷傳送成功的判定規則是其返回值》0,這個卻是硬性要求。

像一般的send()或write()方法都是滿足這個要求的,而且當其他人就用上面的模板方法做傳送函式(裝飾)時,也能遵循這個判定規則/要求;

那麼怎麼呼叫呢?比如有乙個串列埠裝置類uart,其傳送位元組的函式宣告為: int write_once(const unsigned char* , int); 要求其乙個該類物件比如uart intance,該物件在失敗時嘗試5次傳送一段位元組資料(每次間隔300毫秒),那麼如下呼叫:

unsigned char data = "你要傳送的資料";

int ret = t_senduch(&intance, &uart::write_once(data, sizeof(data)), 5);

if (ret > 0)  

hadoop 任務失敗重複次數的處理方法

hadoop任務分為map task和reduce task,當map task執行失敗後會重試,超過重試次數 mapred.map.max.attempts指定,預設為4 整個job會失敗,這是我們不想看到的。解決辦法 hadoop提供配置引數 mapred.max.map.failures.pe...

除錯Magento的方法幾則

在magento安裝目錄下,建立php檔案 假設為list.php 內容如下 然後http server magento list.php 下面的例子可以輸出所有category模型對應表的path欄位 ii.使用colleciton getselectsql 輸出執行的sql語句 collecti...

chkconfig add失敗的處理方法

1,在 etc init.d 下面新增兩個檔案,並授予 x 的許可權,效果如下 2,新增到開啟自啟動管理中去 解決辦法 再次新增 效果如下 分類專欄 centos7 linux運維知識庫 版權 chkconfig 2345 15 95 description php fpm fastcgi proc...