إشارة Qt أبطأ بعشر مرات من وظيفة افتراضية

لقد حددت كائن QT يحتوي على قيمة عدد صحيح ويستخدم إشارة QT مع الدالات الافتراضية المستندة إلى awl :: Observable لإعلام المشتركين عندما تتغير القيمة: # تضمين "Punch / Observable.h" #لفهم اختبار مساحة الاسم { فئة NotifyValueChanged { عام: الفراغ الظاهري onValueChanged () = 0 ؛ } ؛ فئة ValueObject: QObject العامة ، لكمة الجمهور :: يمكن ملاحظتها { Q_OBJECT عام: Q_PROPERTY (قيمة int قراءة قيمة WRITE مجموعة قيمة إشعار قيمة تم تغييرها) إلغاء notifyValueChanged () { إعلام (& NotifyValueChanged :: onValueChanged) ؛ } إشارات: قيمة باطلة خاص: قيمة int () const { إرجاع m_val ؛ } مجموعة باطلة { إذا (m_val! = val) { m_val = val ؛ تنبعث valueChanged () ؛ } } عدد صحيح m_val = 0 ؛ } ؛ }

ثم حددت كائن المشترك (أو المشاهد): اختبار مساحة الاسم { فئة ObserverObject: QObject العامة ، لكمة الجمهور :: مراقب { Q_OBJECT عام: التراجع عن تجاوز onValueChanged () { ++ m_count ؛ } إلغاء فيValueChangedSignal () { ++ m_count ؛ } الأمراض المنقولة جنسيا :: size_t count () const { إرجاع m_count ؛ } خاص: الأمراض المنقولة جنسيا :: size_t m_count = 0 ؛ } ؛ }

ثم أنشأت 1000 مشاهد وأبلغتهم 100000 مرة بكلتا الآليتين: باستخدام اختبار مساحة الاسم ؛ QTIL_UNIT_TEST (SignalTest) { QTIL_ATTRIBUTE (size_t، Observer_count، 1000) ؛ QTIL_ATTRIBUTE (size_t، issue_count، 100000) ، { كائن ValueObject ؛ الأمراض المنقولة جنسيا :: مراقبو ناقلات (Observer_count) ؛ لـ (ObserverObject & Observer: ملاحظون) { QObject :: connect (& object، & ValueObject :: valueChanged، & Observer، & ObserverObject :: onValueChangedSignal، Qt :: DirectConnection)؛ } { السمة المميزة :: StopWatch sw ؛ لـ (size_t i = 0 ؛ i

إشارة Qt أبطأ بعشر مرات من وظيفة افتراضية

لقد حددت كائن QT يحتوي على قيمة عدد صحيح ويستخدم إشارة QT مع الدالات الافتراضية المستندة إلى awl :: Observable لإعلام المشتركين عندما تتغير القيمة: # تضمين "Punch / Observable.h" #لفهم اختبار مساحة الاسم { فئة NotifyValueChanged { عام: الفراغ الظاهري onValueChanged () = 0 ؛ } ؛ فئة ValueObject: QObject العامة ، لكمة الجمهور :: يمكن ملاحظتها { Q_OBJECT عام: Q_PROPERTY (قيمة int قراءة قيمة WRITE مجموعة قيمة إشعار قيمة تم تغييرها) إلغاء notifyValueChanged () { إعلام (& NotifyValueChanged :: onValueChanged) ؛ } إشارات: قيمة باطلة خاص: قيمة int () const { إرجاع m_val ؛ } مجموعة باطلة { إذا (m_val! = val) { m_val = val ؛ تنبعث valueChanged () ؛ } } عدد صحيح m_val = 0 ؛ } ؛ }

ثم حددت كائن المشترك (أو المشاهد): اختبار مساحة الاسم { فئة ObserverObject: QObject العامة ، لكمة الجمهور :: مراقب { Q_OBJECT عام: التراجع عن تجاوز onValueChanged () { ++ m_count ؛ } إلغاء فيValueChangedSignal () { ++ m_count ؛ } الأمراض المنقولة جنسيا :: size_t count () const { إرجاع m_count ؛ } خاص: الأمراض المنقولة جنسيا :: size_t m_count = 0 ؛ } ؛ }

ثم أنشأت 1000 مشاهد وأبلغتهم 100000 مرة بكلتا الآليتين: باستخدام اختبار مساحة الاسم ؛ QTIL_UNIT_TEST (SignalTest) { QTIL_ATTRIBUTE (size_t، Observer_count، 1000) ؛ QTIL_ATTRIBUTE (size_t، issue_count، 100000) ، { كائن ValueObject ؛ الأمراض المنقولة جنسيا :: مراقبو ناقلات (Observer_count) ؛ لـ (ObserverObject & Observer: ملاحظون) { QObject :: connect (& object، & ValueObject :: valueChanged، & Observer، & ObserverObject :: onValueChangedSignal، Qt :: DirectConnection)؛ } { السمة المميزة :: StopWatch sw ؛ لـ (size_t i = 0 ؛ i

What's Your Reaction?

like

dislike

love

funny

angry

sad

wow