最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)AutoResetEvent類(lèi)的阻塞模式方法解析

 更新時(shí)間:2012年11月16日 11:21:43   作者:  
AutoResetEvent :當(dāng)某個(gè)線程執(zhí)行到WaitOne()方法時(shí),該線程則會(huì)處于阻塞模式,當(dāng)被調(diào)用了Set()方法,阻塞的線程則會(huì)繼續(xù)向下執(zhí)行,其狀態(tài)立即被自動(dòng)設(shè)置為阻塞模式
搞過(guò)C#多線程的人對(duì)其中的AutoResetEvent和ManualResetEvent這兩個(gè)類(lèi)都理解,其中的WaitOne()方法和Set()以及Reset()方法在線程同步當(dāng)中用的是比較多的。
AutoResetEvent :當(dāng)某個(gè)線程執(zhí)行到WaitOne()方法時(shí),該線程則會(huì)處于阻塞模式,當(dāng)被調(diào)用了Set()方法,阻塞的線程則會(huì)繼續(xù)向下執(zhí)行,其狀態(tài)立即被自動(dòng)設(shè)置為阻塞模式。
ManualResetEvent :當(dāng)某個(gè)線程執(zhí)行到WaitOne()方法時(shí),該線程則會(huì)處于阻塞模式,當(dāng)被調(diào)用了Set()方法,阻塞的線程則會(huì)繼續(xù)向下執(zhí)行,其狀態(tài)不會(huì)被自動(dòng)設(shè)置為阻塞模式,必須調(diào)用其Reset()方法才會(huì)將其狀態(tài)設(shè)置為阻塞模式。

在python中threading模塊下也有一個(gè)類(lèi)似的線程阻塞模式的類(lèi)threading.Event(),這個(gè)類(lèi)類(lèi)似于C#的ManualResetEvent類(lèi),在調(diào)用set()方法后不能自動(dòng)變?yōu)樽枞J?。有些時(shí)候我們?cè)陂_(kāi)發(fā)項(xiàng)目當(dāng)中需要這種自動(dòng)的阻塞模式,我在項(xiàng)目當(dāng)中也遇到過(guò)這種需求,就嘗試自己寫(xiě)了個(gè)類(lèi)似的類(lèi),吧代碼貼出來(lái)分享下,代碼不多,有不對(duì)或者是不合理的地方希望大蝦們或者是前輩們能指出,謝謝!
代碼如下:
復(fù)制代碼 代碼如下:

# encoding: UTF-8
import threading
class AutoEvent:
def __init__(self):
self.event = None
self.is_wait = False # 是否處于阻塞狀態(tài)
def Wait(self,timeout=None):
if not self.is_wait:
self.is_wait = True
self.event = threading.Event() # 實(shí)例化threading.Event()對(duì)象
self.event.wait(timeout=timeout) # 調(diào)用threading.Event().wait()方法,讓線程處于阻塞狀態(tài)
del self.event # 釋放對(duì)象
def Set(self):
if not self.is_wait:raise 'must be invoke Wait() method before Set()'
self.is_wait = False
self.event.set() # 調(diào)用threading.Event().set()方法,讓線程處于繼續(xù)

下面是Demo,用來(lái)測(cè)試的:
復(fù)制代碼 代碼如下:

import wx
autoEvent = AutoEvent() # 實(shí)例化MamualEvent對(duì)象
class TestDialog(wx.Dialog):
def __init__(self, parent):
wx.Dialog.__init__(self, parent, -1)
b = wx.Button(self, -1, "print", (50, 140))
self.Bind(wx.EVT_BUTTON, self.OnPrint, b)
self.thread = threading.Thread(target=self.work)
self.thread.start()
def work(self):
while True:
print 3
autoEvent.Wait() # 阻塞
def OnPrint(self, evt):
autoEvent.Set() # 繼續(xù)
if __name__=="__main__":
app = wx.App()
f = TestDialog(parent=None)
f.Show()
app.MainLoop()

當(dāng)程序執(zhí)行時(shí),首先會(huì)打印出來(lái)個(gè) ‘3',后面沒(méi)點(diǎn)擊一下print按鈕,則會(huì)打印一個(gè) '3'
測(cè)試成功。
注意:如果你將Demo代碼中的 autoEvent.Wait()和autoEvent.Set() 改成 threading.Event()類(lèi)的wait()和set()方法,結(jié)果會(huì)如下:當(dāng)程序執(zhí)行時(shí),會(huì)打印個(gè)'3' ,后面點(diǎn)擊print按鈕后,會(huì)一直循環(huán)打印'3'

相關(guān)文章

  • C#定制Excel界面并實(shí)現(xiàn)與數(shù)據(jù)庫(kù)交互的方法

    C#定制Excel界面并實(shí)現(xiàn)與數(shù)據(jù)庫(kù)交互的方法

    這篇文章主要介紹了C#定制Excel界面并實(shí)現(xiàn)與數(shù)據(jù)庫(kù)交互的方法的相關(guān)資料,需要的朋友可以參考下
    2015-11-11
  • c# 實(shí)現(xiàn)觀察者模式

    c# 實(shí)現(xiàn)觀察者模式

    這篇文章主要介紹了c# 實(shí)現(xiàn)觀察者模式的步驟,幫助大家更好的理解和使用c#實(shí)現(xiàn)設(shè)計(jì)模式,感興趣的朋友可以了解下
    2021-01-01
  • Unity shader實(shí)現(xiàn)移動(dòng)端模擬深度水效果

    Unity shader實(shí)現(xiàn)移動(dòng)端模擬深度水效果

    這篇文章主要為大家詳細(xì)介紹了Unity shader實(shí)現(xiàn)移動(dòng)端模擬深度水效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C#中this的使用實(shí)例分析

    C#中this的使用實(shí)例分析

    這篇文章主要介紹了C#中this的使用方法,this是C#程序設(shè)計(jì)中非常重要的一個(gè)關(guān)鍵字,本文以實(shí)例形式對(duì)此作出簡(jiǎn)單的用法分析,需要的朋友可以參考下
    2014-08-08
  • C#生成帶注釋的dll并引用實(shí)現(xiàn)

    C#生成帶注釋的dll并引用實(shí)現(xiàn)

    本文主要介紹了C#生成帶注釋的dll并引用實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • C#中winform窗體實(shí)現(xiàn)注冊(cè)/登錄功能實(shí)例(DBHelper類(lèi))

    C#中winform窗體實(shí)現(xiàn)注冊(cè)/登錄功能實(shí)例(DBHelper類(lèi))

    在編寫(xiě)項(xiàng)目時(shí),編寫(xiě)了一部分關(guān)于登錄頁(yè)面的一些代碼,下面這篇文章主要給大家介紹了關(guān)于C#中winform窗體實(shí)現(xiàn)注冊(cè)/登錄功能(DBHelper類(lèi))的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 淺談C#.NET、JavaScript和JSON

    淺談C#.NET、JavaScript和JSON

    本文介紹了C#.NET、JavaScript和JSON的相關(guān)知識(shí),具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • C#控件閃爍的解決方法

    C#控件閃爍的解決方法

    這篇文章主要介紹了C#控件閃爍的解決方法,涉及SetStyle函數(shù)的使用技巧,需要的朋友可以參考下
    2015-01-01
  • C#實(shí)現(xiàn)簡(jiǎn)單的雙色球抽取中獎(jiǎng)號(hào)碼代碼

    C#實(shí)現(xiàn)簡(jiǎn)單的雙色球抽取中獎(jiǎng)號(hào)碼代碼

    這篇文章主要介紹了C#實(shí)現(xiàn)簡(jiǎn)單的雙色球抽取中獎(jiǎng)號(hào)碼代碼的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • 詳解C#中委托的概念與使用

    詳解C#中委托的概念與使用

    委托這個(gè)名字取的神乎其神的,但實(shí)質(zhì)是函數(shù)式編程,把函數(shù)作為參數(shù)傳遞給另一個(gè)參數(shù)。這篇文章主要為大家介紹一下C#中委托的概念與使用,需要的可以參考一下
    2023-02-02

最新評(píng)論

宁波市| 康平县| 千阳县| 略阳县| 临湘市| 辛集市| 德安县| 赫章县| 农安县| 遂平县| 乌鲁木齐县| 延长县| 寿阳县| 新巴尔虎右旗| 孟连| 新巴尔虎右旗| 温州市| 洪雅县| 巧家县| 桐梓县| 德钦县| 剑阁县| 沾化县| 阜城县| 新平| 礼泉县| 麻栗坡县| 平乡县| 上思县| 丹东市| 台江县| 江都市| 思茅市| 临泉县| 重庆市| 故城县| 宣城市| 荔波县| 河南省| 营山县| 崇文区|