إشارة Qt أبطأ بعشر مرات من وظيفة افتراضية
لقد حددت كائن QT يحتوي على قيمة عدد صحيح ويستخدم إشارة QT مع الدالات الافتراضية المستندة إلى awl :: Observable لإعلام المشتركين عندما تتغير القيمة: p> # تضمين "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 ؛ } ؛ }
ثم حددت كائن المشترك (أو المشاهد): p> اختبار مساحة الاسم { فئة ObserverObject: QObject العامة ، لكمة الجمهور :: مراقب { Q_OBJECT عام: التراجع عن تجاوز onValueChanged () { ++ m_count ؛ } إلغاء فيValueChangedSignal () { ++ m_count ؛ } الأمراض المنقولة جنسيا :: size_t count () const { إرجاع m_count ؛ } خاص: الأمراض المنقولة جنسيا :: size_t m_count = 0 ؛ } ؛ }
ثم أنشأت 1000 مشاهد وأبلغتهم 100000 مرة بكلتا الآليتين: p>
باستخدام اختبار مساحة الاسم ؛
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 مع الدالات الافتراضية المستندة إلى awl :: Observable لإعلام المشتركين عندما تتغير القيمة: p> # تضمين "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 ؛ } ؛ }
ثم حددت كائن المشترك (أو المشاهد): p> اختبار مساحة الاسم { فئة ObserverObject: QObject العامة ، لكمة الجمهور :: مراقب { Q_OBJECT عام: التراجع عن تجاوز onValueChanged () { ++ m_count ؛ } إلغاء فيValueChangedSignal () { ++ m_count ؛ } الأمراض المنقولة جنسيا :: size_t count () const { إرجاع m_count ؛ } خاص: الأمراض المنقولة جنسيا :: size_t m_count = 0 ؛ } ؛ }
ثم أنشأت 1000 مشاهد وأبلغتهم 100000 مرة بكلتا الآليتين: p>
باستخدام اختبار مساحة الاسم ؛
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?