欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(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è)類都理解,其中的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è)類似的線程阻塞模式的類threading.Event(),這個(gè)類類似于C#的ManualResetEvent類,在調(diào)用set()方法后不能自動(dòng)變?yōu)樽枞J?。有些時(shí)候我們?cè)陂_(kāi)發(fā)項(xiàng)目當(dāng)中需要這種自動(dòng)的阻塞模式,我在項(xiàng)目當(dāng)中也遇到過(guò)這種需求,就嘗試自己寫了個(gè)類似的類,吧代碼貼出來(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()類的wait()和set()方法,結(jié)果會(huì)如下:當(dāng)程序執(zhí)行時(shí),會(huì)打印個(gè)'3' ,后面點(diǎn)擊print按鈕后,會(huì)一直循環(huán)打印'3'

相關(guān)文章

  • 詳解C#中多態(tài)性學(xué)習(xí)/虛方法/抽象方法和接口的用法

    詳解C#中多態(tài)性學(xué)習(xí)/虛方法/抽象方法和接口的用法

    這篇文章主要為大家詳細(xì)介紹了C#中多態(tài)性學(xué)習(xí)、虛方法、抽象方法和接口的用法的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-03-03
  • c#循環(huán)中產(chǎn)生偽隨機(jī)數(shù)

    c#循環(huán)中產(chǎn)生偽隨機(jī)數(shù)

    在循環(huán)中產(chǎn)生多個(gè)隨機(jī)數(shù),容易出現(xiàn)連續(xù)相同的數(shù)據(jù),最終的多個(gè)隨機(jī)數(shù)并不隨機(jī),而是帶有某種規(guī)律性。
    2010-06-06
  • C# 判斷文件路徑的后綴

    C# 判斷文件路徑的后綴

    本文主要介紹了C# 判斷文件路徑的后綴,,通過(guò)解析文件名并檢查其擴(kuò)展名來(lái)判斷文件的后綴是否為.dcm,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • unity實(shí)現(xiàn)虛擬搖桿控制Virtual Joystick

    unity實(shí)現(xiàn)虛擬搖桿控制Virtual Joystick

    這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)虛擬搖桿控制Virtual Joystick,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#中的let字句應(yīng)用示例

    C#中的let字句應(yīng)用示例

    這篇文章主要給大家介紹了C#中的let字句,文中通過(guò)應(yīng)用實(shí)例介紹的很詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,有需要的朋友們下面來(lái)一起看看吧。
    2017-02-02
  • C#使用鉤子獲得按鍵信息的方法

    C#使用鉤子獲得按鍵信息的方法

    這篇文章主要介紹了C#使用鉤子獲得按鍵信息的方法,實(shí)例分析了C#中鉤子的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-05-05
  • C#實(shí)現(xiàn)流程圖設(shè)計(jì)器

    C#實(shí)現(xiàn)流程圖設(shè)計(jì)器

    這篇文章主要介紹了C#實(shí)現(xiàn)流程圖設(shè)計(jì)器,感興趣的小伙伴們可以參考一下
    2015-11-11
  • winform調(diào)用javascript的小例子

    winform調(diào)用javascript的小例子

    winform調(diào)用javascript的小例子,需要的朋友可以參考一下
    2013-05-05
  • C# 判斷時(shí)間段是否相交的實(shí)現(xiàn)方法

    C# 判斷時(shí)間段是否相交的實(shí)現(xiàn)方法

    這篇文章主要介紹了C# 判斷時(shí)間段是否相交的實(shí)現(xiàn)方法的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10
  • C#獲取字符串后幾位數(shù)的方法

    C#獲取字符串后幾位數(shù)的方法

    這篇文章主要介紹了C#獲取字符串后幾位數(shù)的方法,實(shí)例分析了C#操作字符串的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03

最新評(píng)論