C 執行緒 第四執行緒例項

2022-04-02 20:23:44 字數 2144 閱讀 7438

場景:系統中常常會有一些需要定時去迴圈執行的儲存過程或方法等,這時就出現了定時任務小程式。

模型:查詢需定時執行的計畫任務-->插入執行緒池-->執行任務

static

void

mainmethod()

//////

查詢計畫任務

///static

void

querytask()

; threadpool.queueuserworkitem(invokethreadmethod, todo_taskmodel);

}thread.sleep(

30000); //

30s迴圈一次}}

//////

完成計畫任務

//////

static

void invokethreadmethod(object

taskmodel)

......執行完成.

", model.taskid, model.itime);

}///

///任務實體

///class

taskmodel

public datetime itime

}

1.查詢計畫任務時只管有任務就推給執行緒池,不等待執行緒池中任務是否完成.(避免有些計畫任務耗時比較長,阻塞後面定時任務執行時間)每隔30秒迴圈一次計畫任務.

2.每條計畫任務完成後列印相應資訊.(也可記錄日誌)

3.如果查詢計畫任務記錄數較多,可調整相應的迴圈時間間隔。避免任務插入執行緒池時間過長阻塞後面定時任務執行時間。

模型:檢索任務-->插入執行緒池-->等待執行緒池任務完成-->提示任務完成

static

void

mainmethodb()

static

void

querytaskb()

; threadpool.queueuserworkitem(invokethreadmethodb, model);

}//等待所有執行緒執行完畢

countdown.waitall();

console.writeline(""

, datetime.now);

thread.sleep(

30000

); }

}static

void invokethreadmethodb(object

obj)

class

taskmodeb

public datetime itime

public mutiplethreadresetevent manualresetevent

}///

///解決問題:waithandle.waitall(evetlist)方法最大只能等待64個manualresetevent事件

///public

class

mutiplethreadresetevent

//////

喚醒乙個等待的執行緒

/// public

void

setone()

}//////

等待所以執行緒執行完畢

/// public

void

waitall()

//////

釋放物件占用的空間

/// public

void

dispose()

}

querytaskb()在檢索任務記錄數後會記錄任務條數,並例項化對應的manualresetevent陣列,做為引數傳給執行緒池中線程任務。

最後等待執行緒池中所有任務執行完成。後續可根據實際需要編寫各自業務邏輯。

兩個例項的不同點:是否等待執行緒池中的所有任務完成。

例項1中定時任務對執行的時間要求比較高,到了某個時間點必須執行某個任務。所以不能等待執行緒池中的任務完成。

例項2中資料推送程式對推送的時間要求相對1中要低一點。介面表中只要檢索到資料就推送給第三方平台。一般每次傳輸資料量不是很多,但很頻繁。

缺點:當推送資料量大時,執行任務時間可能會較長。主線程會等待執行緒池中的所有任務完成。所有每次迴圈檢索任務的時間間隔可能會出現30s+ns現象。

C 四) 執行緒與程序

c98標準中不支援執行緒建立,c11標準中才有執行緒建立支援。目前windows和linux系統都自帶建立程序和執行緒函式,程序process,執行緒thread。1 程序與執行緒 比如我們一樓有個圖書櫃,那這個圖書櫃的存在就相當於資料已經載入到記憶體中了,你在那邊讀計算機系統書,然後我過來拿起一本...

C 基礎 多執行緒筆記 四 執行緒池

現在到了關於多線最簡單使用的最後一篇筆記。無論從什麼角度來看,每一項事物都應該有其所在的空間,而對於執行緒來說,執行緒池就是它所存在的空間,或者叫容器了。接下來,看看這個執行緒池是如何使用的吧!概念 manualresetevent,通知乙個或多個正在等待的執行緒已發生事件 manualresete...

c 執行緒池實現(四)執行緒池實現

前面已經說到了同步佇列的實現,下面來看執行緒池的實現。ifndef include threadpool define include threadpool include include include include include syncqueue.hpp namespace mythrea...