pyalgotrade原始碼閱讀:事件分發機制dispatcher.py
from pyalgotrade import utils from pyalgotrade import observer from pyalgotrade import dispatchprio # This class is responsible for dispatching events from multiple subjects, # synchronizing them if necessary. class Dispatcher(object): def __init__(self): self.__subjects = [] self.__stop = False self.__startEvent = observer.Event() self.__idleEvent = observer.Event() self.__currDateTime = None # Returns the current event datetime. # It may be None for events from realtime subjects. def getCurrentDateTime(self): return self.__currDateTime def getStartEvent(self): return self.__startEvent def getIdleEvent(self): return self.__idleEvent def stop(self): self.__stop = True def getSubjects(self): return self.__subjects def addSubject(self, subject): # Skip the subject if it was already added. if subject in self.__subjects: return # If the subject has no specific dispatch priority put it right at the end. if subject.getDispatchPriority() is dispatchprio.LAST: self.__subjects.append(subject) else: # Find the position according to the subject's priority. pos = 0 for s in self.__subjects: if s.getDispatchPriority() is dispatchprio.LAST or subject.getDispatchPriority() < s.getDispatchPriority(): break pos += 1 self.__subjects.insert(pos, subject) subject.onDispatcherRegistered(self) # Return True if events were dispatched. def __dispatchSubject(self, subject, currEventDateTime): ret = False # Dispatch if the datetime is currEventDateTime of if its a realtime subject. if not subject.eof() and subject.peekDateTime() in (None, currEventDateTime): ret = subject.dispatch() is True return ret # Returns a tuple with booleans # 1: True if all subjects hit eof # 2: True if at least one subject dispatched events. def __dispatch(self): smallestDateTime = None eof = True eventsDispatched = False # Scan for the lowest datetime. for subject in self.__subjects: if not subject.eof(): eof = False smallestDateTime = utils.safe_min(smallestDateTime, subject.peekDateTime()) # Dispatch realtime subjects and those subjects with the lowest datetime. if not eof: self.__currDateTime = smallestDateTime for subject in self.__subjects: if self.__dispatchSubject(subject, smallestDateTime): eventsDispatched = True return eof, eventsDispatched def run(self): try: for subject in self.__subjects: subject.start() self.__startEvent.emit() while not self.__stop: eof, eventsDispatched = self.__dispatch() if eof: self.__stop = True elif not eventsDispatched: self.__idleEvent.emit() finally: # There are no more events. self.__currDateTime = None for subject in self.__subjects: subject.stop() for subject in self.__subjects: subject.join()
相關推薦
pyalgotrade原始碼閱讀:事件分發機制dispatcher.py
from pyalgotrade import utils from pyalgotrade import observer from pyalgotrade import dispatchprio # This class is responsible for disp
pyalgotrade原始碼閱讀:事件驅動的機制,observer.py
# PyAlgoTrade # # Copyright 2011-2018 Gabriel Martin Becedillas Ruiz # # Licensed under the Apache License, Version 2.0 (the "License"); #
【Android】原始碼分析 - View事件分發機制
事件分發物件 (1)所有 Touch 事件都被封裝成了 MotionEvent 物件,包括 Touch 的位置、時間、歷史記錄以及第幾個手指(多指觸控)等。 (2)事件型別分為 ACTION_DOWN, ACTION_UP,ACTION_MOVE,ACTION_POINTER_D
筆記:事件分發機制(二):ViewGroup的事件分發
前言 前面我根據郭大神的部落格做了View的事件分發的筆記 筆記:事件分發機制(一):View的事件分發 對View的事件分發有了一個比較深入的瞭解。 本篇還是就郭大神的部落格 Android事件分發機制完全解析,帶你從原始碼的角度徹底理解(下)
Android面試準備:事件分發機制
View的事件分發機制舉例 為按鈕設定onClick點選事件和onTouch觸控事件的執行順序為: 1、onClick事件: button.setOnClickListener(new OnClickListener() { @Over
9:安卓事件分發機制
結束 ron 何事 處理 spa 將不 包含 move 一個 1: ? public boolean dispatchTouchEvent (MotionEventev) 這個方法分發TouchEvent ? public booleanonInterceptT
點選事件分發機制 關鍵原始碼筆記
請注意,涉及到的原始碼 SDK 版本為 27,不同版本可能存在偏差,一切以具體的原始碼為準。 宣告: 文字部分主要參考自 《Android 開發藝術探索》,原始碼部分的解讀主要摘抄自 Android 觸控事件機制(三) View中觸控事件詳解 、 Android 觸控事件機制(四)
Andrid View事件分發機制原始碼分析
Android 的view樹結構大家都清楚,但是事件序列是經過一個怎樣的處理路徑那。今天就帶著疑問來看看原始碼,去尋找答案。 首先我們先看事件如何從Activity開始分發。 public class Activity extends ContextThemeWrapper
Android事件分發機制原始碼分析之Activity篇
在之前的事件分發分析中,曾提及到View的事件是由ViewGroup分發的,然而ViewGroup的事件我們只是稍微帶過是由Activity分發的。而我們知道,事件產生於使用者按下螢幕的一瞬間,事件生成後,經過一系列的過程來到我們的Activity層,那麼事件是怎樣從Activity傳遞
原始碼角度再看Android事件分發機制
基礎瞭解 MotionEvent 所謂點選事件分發,其實就是對MotionEvent分發。當一個MotionEvent產生了以後,系統需要把這個事件傳遞給一個具體的View,而這個傳遞的過程就是分發過程。 三種主要事件Action package andro
自定義View(二)View的事件分發機制原始碼解析
View的事件分發機制是Android中的一個難點,也是非常重要的知識點,充分理解和掌握事件分發機制有助於我們在自定義view的過程中更好地設計和解決事件相關問題。下面我們通過原始碼的角度去分析一下Android是怎麼處理view事件的。 一個事件(比如手指按下螢幕的down事件)首先傳遞到
詳細解析Android的View事件分發機制 附帶原始碼分析
前言 在Android中,事件分發機制是一塊很重要的知識點,掌握這個機制能幫你在平時的開發中解決掉很多的View事件衝突問題,這個問題也是面試中問的比較多的一個問題了,今天就來總結下這個知識點。 事件分發機制 事件分發原因 Android中頁面上的View是以
Android事件分發機制完全解析,帶你從原始碼的角度徹底理解(上)-郭霖
其實我一直準備寫一篇關於Android事件分發機制的文章,從我的第一篇部落格開始,就零零散散在好多地方使用到了Android事件分發的知識。也有好多朋友問過我各種問題,比如:onTouch和onTouchEvent有什麼區別,又該如何使用?為什麼給ListView引入了一
Android事件分發機制完全解析,帶你從原始碼的角度徹底理解(下)-郭霖
記得在前面的文章中,我帶大家一起從原始碼的角度分析了Android中View的事件分發機制,相信閱讀過的朋友對View的事件分發已經有比較深刻的理解了。 還未閱讀過的朋友,請先參考 Android事件分發機制完全解析,帶你從原始碼的角度徹底理解(上) 。 那麼今天我們將繼
Android事件分發機制:基礎篇:最全面、最易懂
如何提升安卓水平?安卓開發者必須瞭解的事件分發機制。 最全面、最易懂的形式來講解Android事件分發機制。 0. 前言 鑑於安卓分發機制較為複雜,故分為多個層次進行講解,分別為基礎篇、實踐篇與高階篇。 (一)基礎篇:從基本概念入手,介紹了分發機制中的核心方法,通過分析其核心邏輯,總結其事件分發機制。 (
Android事件分發機制完全解析,帶你從原始碼的角度徹底理解(上)
其實我一直準備寫一篇關於Android事件分發機制的文章,從我的第一篇部落格開始,就零零散散在好多地方使用到了Android事件分發的知識。也有好多朋友問過我各種問題,比如:onTouch和onTouchEvent有什麼區別,又該如何使用?為什麼給ListView引入
Android事件分發機制完全解析,帶你從原始碼的角度徹底理解(下)
記得在前面的文章中,我帶大家一起從原始碼的角度分析了Android中View的事件分發機制,相信閱讀過的朋友對View的事件分發已經有比較深刻的理解了。那麼今天我們將繼續上次未完成的話題,從原始碼的角度分析ViewGroup的事件分發。首先我們來探討一下,什麼是ViewGro
android進階4step4:Android實戰開發——事件分發機制
Android事件分發機制 為什麼需要事件分發機制? 比如:上圖 Button(View)的ViewGroup是FrameLayout2 FragmeLayout2的ViewGroup是FragmeLayout1 當點選Button時,所觸發的事件到底是交給誰來
讀《android開發藝術探索》筆記一:View的事件分發機制
View的事件分發機制:對於一個根viewgroup來說,點選事件產生後,首先會傳遞給它,這是它的dispatchTouchEvent就會被呼叫,如果這個viewGroup的OnInterceptTouchEvent方法返回true就表示它要攔截當前事件,接著事
android SDK-25事件分發機制--原始碼正確解析
android SDK-25事件分發機制–原始碼正確解析 Android 事件分發分為View和ViewGroup的事件分發,ViewGroup比View過一個攔截判斷,viewgroup可以攔截事件,從而決定要不要把事件傳遞給子view,因為view沒