منزل
Top.Mail.Ru Yandeks.Metrika
المنتدى: "أخرى";
الأرشيف الحالي: 2017.03.12;
تنزيل: [xml.tar.bz2];

إلى

كيف تعيش على؟ البحث عن فروع مماثلة


Dimka Maslov ©   (2016-03-23 20:53) [0]

في العصور القديمة ، كنت تستخدم FastMM للبحث عن تسرب الذاكرة. كل شيء كان على ما يرام. لكن الآن ، في السنة الحالية من الاختبارات الشديدة ، مع ظهور Delphi XE8 في داخلي ، لاحظت أن FastMM لم تعد هناك حاجة ، لكن يكفي الإشارة إلى ذلك في برنامج ReportMemoryLeaksOnShutdown: = True. يبدو أن كل شيء على ما يرام ، ولكن هناك شيء غير جيد. أي في وقت سابق ، كان بإمكاني تكوين كل شيء ، لذلك عندما أقوم بإنهاء البرنامج ، سيتم أيضًا إنشاء ملف ، يشير إلى المكان الذي تم فيه تخصيص الكتلة المسربة. الآن يمكنك فقط معرفة اسم الفصل الذي تم تسريبه. أو كل نفس ، يمكنك التنافس بطريقة أو بأخرى؟



Rouse_ ©   (2016-03-23 21:02) [1]

FastMM (إن لم يكن لافتراض أنه تم تنفيذه بالفعل في دلفي) يعمل بشكل جيد وفي شكل الإصدار القديم - باستخدام المكتبة الخارجية ، والتي هي المسؤولة تماما عن إنشاء هذا السجل.



Dimka Maslov ©   (2016-03-23 22:03) [2]

أي تفعل كل شيء كما كان من قبل وسوف يعمل كل شيء؟ وإذا كان لدي تطبيق 64 بت؟ (ولدي حقا بت 64).



DVM ©   (2016-03-23 22:54) [3]


>
> Dimka Maslov © (23.03.16 20: 53)

في دلفي ، على حد علمي ، فإن FastMM4 المشذبة مدمج. لا أحد يمنع الاتصال وعادية.



Rouse_ ©   (2016-03-23 23:47) [4]

لن أخبرك عن وحدات بت 64 - القواعد تعمل في وحدات بت 32.



Дмитрий Белькевич ©   (2016-03-24 00:35) [5]

معايير Xnumx أيضا. ونعم ، لقد تم اقتطاعها في الدلفين. أنا سد العجز في.



Dimka Maslov ©   (2016-03-24 08:38) [6]

أنا أرى ، شكرا.

هنا فقط سؤال آخر. لماذا عندما أقوم بالمجان داخل جسم الدفق (في طريقة التنفيذ المتراكبة) - تقسم عند الذاكرة غير المخصصة من فئة الدفق (على الرغم من أن المدمر يطلق النار ويتم تحرير جميع كائنات الكائنات والخطوط) ، ولكن عندما أقوم بتحديد FreeOnTerminate: = صواب وإنهاء ، لا أقسم؟ هل هذا خطأ آخر؟



Владислав ©   (2016-03-24 10:31) [7]

> Dimka Maslov © (24.03.16 08: 38) [6]

لماذا عندما أكون داخل جسم الدفق (في طريقة التنفيذ المتداخلة) ، قم بعمل مجاني

إلى مجاني ، مثيل فئة مؤشر ترابط قابل للتنفيذ ؟؟



Dimka Maslov ©   (2016-03-24 10:45) [8]


> مجانا ، مثيل لفئة الخيط القابل للتنفيذ ؟؟


من اخر



Юрий Зотов ©   (2016-03-24 11:03) [9]

وهذا هو ، تم إنشاء كائن في موضوع واحد ، وتدميرها في آخر؟



Dimka Maslov ©   (2016-03-24 11:04) [10]


> وهذا هو ، تم إنشاء كائن في موضوع واحد ، ولكن دمرت
> في آخر؟


ما هو سيء للغاية في ذلك؟



Владислав ©   (2016-03-24 12:16) [11]

> Dimka Maslov © (24.03.16 10: 45) [8]

من اخر

هذه هي وظيفة الدفق:

function ThreadProc (الموضوع: TThread): Integer؛ ... بدأ ... محاولة إن لم يكن الخيط محاولة Thread.Execute. <========= هنا يمكنك فرقعة نسخة إلا Thread.FFatalException: = AcquireExceptionObject؛ <======= علاوة على ذلك في النص ، هناك مكالمات إلى مثيل banged ينتهي. أخيرا FreeThread: = Thread.FFreeOnTerminate؛ النتيجة: = Thread.FReturnValue؛ Thread.DoTerminate. الموضوع: انتهى: = صحيح ؛ SignalSyncEvent. إذا FreeThread ثم Thread.Free؛ <============ ثم قد يتعطل المثيل مرة أخرى ... ينتهي.



Dimka Maslov ©   (2016-03-24 12:39) [12]


> هنا كنت فرقعة نسخة


هذا هو السؤال الذي لا يتعطل على الإطلاق.



Владислав ©   (2016-03-24 13:45) [13]

الانفجارات:

"... (على الرغم من أن المدمر يتم تشغيله ويتم تحرير جميع كائنات الكائنات والصفوف) ..."

ولا يمكنك القيام بذلك (حرر مثيلًا لفئة TThread في طريقة التنفيذ)!

"... ولكن عندما أقوم بتحديد FreeOnTerminate: = صواب وإنهاء ..."

هكذا ، كما هو مذكور أعلاه ، قم بذلك ، حيث لا تحتاج إلى مثيل بعد بدء الدفق.



Dimka Maslov ©   (2016-03-24 14:10) [14]

بشكل عام ، CreateThread - لدينا كل شيء!



NoUser ©   (2016-03-24 14:27) [15]

> هذا خطأ آخر؟
نعم ، Treadread هو الشر - BeginThread هو كل شيء لدينا))
مجاني -> WaitForSingleObject (FHandle ، INFINITE) ؛ //!



Владислав ©   (2016-03-24 14:49) [16]

> Dimka Maslov © (24.03.16 14: 10) [14]

لماذا اذن اقرأ قليلا عن هذا الموضوع.

حسنا ، ليس فقط CreateThread ، ولكن BeginThread.



Dimka Maslov ©   (2016-03-24 20:15) [17]

تقي إنشاء https://msdn.microsoft.com/en-us/library/windows/desktop/ms682453٪28v=vs.85٪29.aspx



Nouser ©   (2016-03-24 21:00) [18]

يسعى مندوبو المبيعات إلى: _beginthread / ex
وهكذا يمكنك إثارة مثل هذا الشيء
TWork.Add (BeginThread (nil، 0، @ TWork.Run، TWork.Create، 0، PCardinal (0) ^))؛ //))



Владислав ©   (2016-03-24 22:23) [19]

> Dimka Maslov © (24.03.16 20: 15) [17]

أو ربما لا تزال تقرأ؟ أو أشعل النار في حد ذاته هو أكثر إثارة للاهتمام؟ :)



Dimka Maslov ©   (2016-03-24 22:59) [20]

لذلك قرأت. كل شيء مكتوب بوضوح وبشكل واضح. على عكس ساي مكتب معين.



DVM ©   (2016-03-24 23:17) [21]


> Dimka Maslov © (24.03.16 20: 15) [17]

1) ليس عبر منصة
2) لا يقوم بتعيين إشارة IsMultithreaded تلقائيًا.



Kerk ©   (2016-03-24 23:57) [22]

وماذا يمكن مشاهدة استخدام الذاكرة في وقت التشغيل؟ بمعنى - التقاط صورة ومعرفة من ، وكم ولأي ذاكرة المخصصة. هل هو حر؟



Германн ©   (2016-03-25 01:55) [23]


> Dimka Maslov © (24.03.16 12: 39) [12]
>
>
Quoted1 >> هنا أنت فرقعة نسخة
>
>
> هذا هو السؤال الذي لا يحطم على الإطلاق.

على أي أساس يتم هذا الاستنتاج.



Eraser ©   (2016-03-25 05:38) [24]


> Dimka Maslov © (24.03.16 08: 38) [6]

TThread هي واحدة من الطبقات الأكثر ملاءمة في دلفي. ما لم تتدفق الابتكارات في أحدث إصدارات دلفي يمكن أن تنافس (موازية ليب).
قبل استخدام TThread ، تحتاج إلى اختراق أيديولوجيتها ، على الأقل سطحيًا ، وعدم التسرع في حذف كائن من داخل نفسه.
إحدى نقاط القوة في TThread هي حدث OnTerminate ، الذي يتم تنفيذه دائمًا في سياق سلسلة الرسائل الرئيسية.

بشكل عام ، TThread الحديثة التي لا تعرف كيف.

الإجراء TForm1.Button1Click (المرسل: TObject) ؛ فار أنا: عدد صحيح بدأ أنا: = 1 ؛ TThread.CreateAnonymousThread ( إجراء بدأ Inc (I) ؛ TThread.Queue (لا شيء ، إجراء بدأ ShowMessage (I.ToString) ؛ نهاية )؛ نهاية ). ينتهي.



Dimka Maslov ©   (2016-03-25 09:38) [25]


> 1) ليس عبر منصة


وكلب معه.


> على أي أساس تم التوصل إلى هذا الاستنتاج.


استنادا إلى تحليل تسرب الذاكرة.


> OnTerminate الحدث


يتم استبداله بسهولة بواسطة SendMessage (Application.MainFormHandle ، .....) ، والذي يعمل أيضًا في سياق سلسلة الرسائل الرئيسية.



DVM ©   (2016-03-25 11:41) [26]


> Dimka Maslov © (25.03.16 09: 38) [25]


> من السهل استبداله بـ SendMessage (Application.MainFormHandle ،
> .....) ، والتي سيتم تنفيذها أيضا في سياق الخيط الرئيسي.

مع مراعاة وجود النوافذ في البرنامج ودورة لاختيار الرسائل. OnTerminate لا يتطلب ويندوز.



NoUser ©   (2016-03-25 14:48) [27]

> OnTerminate لا يتطلب ويندوز.
ثم ماذا يتطلب؟



DVM ©   (2016-03-25 17:00) [28]


> NoUser © (25.03.16 14: 48) [27]


> ثم ماذا يتطلب؟

يسمى OnTerminate خلال تزامن. المزامنة الحالية لم تعد تستخدم الرسائل كما كان من قبل. انظر تطبيق التزامن للحصول على التفاصيل.



NoUser ©   (2016-03-25 17:50) [29]

لذا ، أتساءل كيف أقوم بإعداد الخيط الرئيسي (بدون نوافذ) بحيث يمكن لـ OnTerminate العمل هناك؟



DVM ©   (2016-03-25 18:17) [30]


> لذلك أتساءل عن كيفية جعل التيار الرئيسي (بدون نوافذ) ،
> حتى يعمل هذا OnTerminate هناك؟

برنامج Project1 ؛ {$ APPTYPE CONSOLE} {$ R * .res} الاستخدامات System.SysUtils ، System.Classes ؛ نوع TMyThread = class (TThread) محمي تنفيذ الإجراء ؛ تجاوز. ينتهي. TMyClass = الطبقة خاص FSecondThread: TMyThread؛ إجراء ThreadTreminated (المرسل: TObject)؛ جمهور منشئ المدمرة تدمير. تجاوز. تشغيل الإجراء ؛ ينتهي. فار MyClass: TMyClass؛ {TMyClass} منشئ TMyClass.Create ؛ بدأ خلق الموروثة ؛ FSecondThread: = TMyThread.Create؛ FSecondThread.FreeOnTerminate: = True؛ FSecondThread.OnTerminate: = ThreadTreminated؛ ينتهي. destructor TMyClass.Destroy؛ بدأ FSecondThread.Free. الموروثة. ينتهي. الإجراء TMyClass.Run ؛ فار i: عدد صحيح بدأ لأني: = 0 إلى 9 تفعل بدأ Writeln (I) ؛ CheckSynchronize. النوم (1000) ؛ ينتهي. ينتهي. الإجراء TMyClass.ThreadTreminated (المرسل: TObject) ؛ بدأ Writeln ("تم إنهاء السلسلة الثانية") ؛ ينتهي. {TMyThread} الإجراء TMyThread.Execute ؛ بدأ Writeln ("بدء الموضوع الثاني") ؛ النوم (2000) ؛ Writeln ("نهاية السلسلة الثانية") ؛ ينتهي. بدأ محاولة MyClass: = TMyClass.Create؛ محاولة MyClass.Run. أخيرا MyClass.Free. ينتهي. إلا على E: استثناء تفعل Writeln (E.ClassName، ":"، E.Message)؛ ينتهي. readln. نهاية.



DVM ©   (2016-03-25 18:20) [31]

توضيح صغير ، من الضروري إزالة FSecondThread.FreeOnTerminate: = True؛



NoUser ©   (2016-03-25 19:07) [32]

شكرا لك ، ولكن كما اعتقدت المعجزة لم يحدث - CheckSynchronize.
التهديد.
وما إصدار DX؟



DVM ©   (2016-03-25 21:46) [33]


> NoUser © (25.03.16 19: 07) [32]


> معجزة لم يحدث - CheckSynchronize.

بالطبع ، لا توجد معجزة ولا يمكن أن تكون. لا يمكن لأحد باستثناء الخيط نفسه تنفيذ التعليمات البرمجية في سياقها. في الواقع ، داخل CheckSynchronize ، يتم تحديد الإجراء من قائمة الانتظار للتنفيذ من قبل مؤشر الترابط والتنفيذ نفسه.


> وما إصدار Dx؟
>
>

لدي D8. لكن CheckSynchronize كان موجودًا لفترة طويلة جدًا ، في 2009 كان بالفعل مثل ، أو ربما في وقت سابق.



Германн ©   (2016-03-25 23:05) [34]

قبل. في D2007 كان بالتأكيد.



Dimka Maslov ©   (2016-03-27 09:45) [35]


> المزامنة الحالية لم تعد تستخدم الرسائل


إذا كنت تنقلب أكثر عمقًا ، فإن المزامنة الحالية تستخدم WakeMainThread (حدث عالمي) ، والذي تم تعيينه على Application.WakeMainThread ، والذي يتم داخله PostMessage(معالجة ، WM_NULL ، 0 ، 0) إلى كائن التطبيق نفسه ، والذي يستدعي CheckSynchronize.

وبالتالي ، فإننا نستنتج أنه لا يوجد التزامن الذي لم يعد يستخدم الرسائل ...



DVM ©   (2016-03-27 10:27) [36]


> Dimka Maslov © (27.03.16 09: 45) [35]


> بداخله تتم PostMessage (المؤشر ، WM_NULL ، 0 ،
> 0) إلى كائن التطبيق نفسه ، والذي يستدعي CheckSynchronize.
>

أنت لا تخلط بين الناس. هذا المطبخ الداخلي هو كائن تطبيق حصريًا ، وليس Syncronize. يتفاعل هذا التطبيق مع WakeMainThread بشكل حصري. يمكن أن تعمل Syncronize بدون أي دورات جلب أو تطبيق أو رسال للرسائل ، كما أظهرت أعلاه. في كائن التطبيق ، تم القيام بذلك فقط لزيادة استجابته لـ Syncronize ؛ وبنجاح نفسه ، يمكنه التحقق من CheckSynchronize مرة واحدة في الثانية.



Dimka Maslov ©   (2016-03-27 10:44) [37]


> DVM © (27.03.16 10: 27) [36]


ولكن إذا لم تكن هناك دورة لمعالجة الرسائل ولم أكن أنا شخصياً أزعج التحقق من CheckSynchronize ، فلن تعمل المزامنة مع سلسلة الرسائل الرئيسية على الإطلاق! علاوة على ذلك ، لا يوجد شيء يقال صراحة حول CheckSynchronize في وصف System.Classes.TThread.Synchronize. يجب على المرء أن يخمن من تحت القشرة لقراءة في انظر أيضا.

و اكثر مرة واحدة ، منذ وقت طويل ، قبل حوالي خمس سنوات ، قمت بإجراء تزامن التدفق الحسابي مع مؤشر الترابط الرئيسي من خلال هذا المزامنة. كان يعمل ببطء شديد لدرجة أنه أصبح من المستحيل عدها. اضطررت لرمي كل شيء ووضعها في أقسام حرجة.



DVM ©   (2016-03-27 10:51) [38]


> ولكن إذا لم تكن هناك دورة لمعالجة الرسائل ولم أهتم بنفسي
> تحقق من CheckSynchronize ، ثم تزامن مع الرئيسي
> لن يعمل التدفق على الإطلاق!

بالطبع ، قد لا يكون الدفق الرئيسي حلماً ، حيث يريد شخص ما هناك التزامن معه. لا يوجد حل طبيعي لهذه المشكلة ، إذا كان الخيط لا يريد ذلك ، فلن يجبره أحد على تنفيذ بعض التعليمات البرمجية في سياقها.


> ذات مرة ، قبل حوالي خمس سنوات ، قمت بإجراء تزامن للحوسبة
> تدفق مع الرئيسي من خلال هذا التزامن. لقد نجحت
> ببطء شديد لدرجة أنه أصبح من المستحيل عدها.
>

حسنًا ، لقد تم التفكير في الأمر من أجل التزامن مع واجهة المستخدم الرسومية ، وهو بالكاد يحتاج إلى أي سرعة خاصة هناك. أي شخص يريد مزامنة التدفقات الخاصة بهم مع بعضهم البعض سوف يأتي مع تطبيقات أكثر كفاءة في كل حالة. بشكل عام ، IMHO - التزامن هو الشر ، لا يمكنك مزامنة - لا تزامن.



Dimka Maslov ©   (2016-03-27 11:09) [39]


> المزامنة شريرة ، لا يمكنك المزامنة - لا تزامن


كلمات ذهبية. فقط لا تزامن في دلفي أمر مستحيل.



DVM ©   (2016-03-27 11:26) [40]


> Dimka Maslov © (27.03.16 11: 09) [39]


> فقط لا تتم مزامنتها في دلفي.

مع واجهة المستخدم الرسومية ، نعم ، ولكن في حالات أخرى ، يمكنك التوصل إلى خيارات العمل. على الرغم من عدم وجود هياكل بيانات LockFree في دلفي ، يمكنك كتابتها بنفسك. على سبيل المثال ، تشكيلة الفريق هي المرشح الأول لهذا الغرض.



Eraser ©   (2016-03-27 14:00) [41]

التزامن هو حقا عكاز ، يتم استخدامه نادرا للغاية. لكن في الأماكن يكون ذلك مستحيلاً بدونه.
وبالتأكيد لا يمكنك استخدامه لعرض التقدم ، أو بعض البيانات البسيطة نسبياً في واجهة المستخدم الرسومية. يتم ذلك من خلال جهاز توقيت بسيط في التيار الرئيسي والتحقق من ذلك من الخصائص الضرورية للتيار ، بعد حماية الحرجة الخاصة بهم. القسم ، بالطبع.



DVM ©   (2016-03-27 15:51) [42]


> ممحاة © (27.03.16 14: 00) [41]
> التزامن هو حقا عكاز ، المستخدمة
> نادر للغاية.

من المحتمل أنك تتحدث عن المزامنة على وجه التحديد. في الحالة العامة ، نادراً ما يكون لديّ مؤشر ترابط إدارة دون الوصول المتزامن إلى أي موارد.



Eraser ©   (2016-03-27 16:18) [43]


> اعتقد انها لك حول تزامن على وجه التحديد

نعم بالطبع عنه.



صفحات: 1 2 فرع كامل

المنتدى: "أخرى";
الأرشيف الحالي: 2017.03.12;
تنزيل: [xml.tar.bz2];

الطابق العلوي





الذاكرة: 0.73 ميغابايت
الوقت: 0.04 ج
15-1458755602
ديمكا ماسلوف
2016-03-23 20:53
2017.03.12
كيف تعيش على؟


3-1312799506
ربع
2011-08-08 14:31
2017.03.12
GUID فارغة


2-1435584756
Artemka
2015-06-29 16:32
2017.03.12
استعلام SQL مركب


1-1349251842
de_guta
2012-10-03 12:10
2017.03.12
مشكلة في الكتابة إلى مجموعة


8-1208967764
Darkmoon
2008-04-23 20:22
2017.03.12
قناة ألفا





الأفريكانية الألبانية عربي الأرميني أذربيجان الباسكي البيلاروسية Bulgarian التشيكية الصينية المبسطة) تقاليد صينية) الكرواتية التشيكية دانماركي Dutch English الإستونية الفلبينية Finnish جيب
الجاليكية الجورجية الألمانيّة اليونانيّة الكريولية الهايتية اللغة العبرية الهندية الهنغارية أيسلندي Indonesian الأيرلندية Italian اليابانيّة الكوريّة اللاتفية اللتوانية المقدونية الملايو المالطية Norwegian
اللغة الفارسية بولنديّة البرتغاليّة رومانية Russian صربي السلوفاكيّة سلوفيني إسباني السواحيلي Swedish Thai التركية الأوكراني الأردية الفيتنامية ويلزي اليديشية البنغالي البوسنية
السيبيونو الاسبرانتو الغوجاراتية الهوسا همونغ الإيبو جاوي الكانادا الخمير لاو لاتينية الماوري المهاراتية المنغولية النيبالية البنجابية الصومالية التاميل التيلجو اليوروبا
زولو
Английский Французский ألماني Итальянский البرتغالية Русский Испанский