PDA

View Full Version : سوال: کار با ترید ها (thread)



تجلی
یک شنبه 25 دی 1390, 01:49 صبح
خواستم بدونم آیا این امکان داره که از یک thread دو کار بخوایم .

مثلا در یک جا با زدن دکمه اول thread مربوطه یک عملی رو انجام بده و تمام کنه و با زدن دکمه دوم همین thread کار دیگه ای رو انجام بده ؟

اگر جواب مثبته چطور میشه این کار رو کرد چون در هر thread فقط یک روال excute وجود داره .
اگر امکان داره با مثال توضیح بدید .

Felony
یک شنبه 25 دی 1390, 07:32 صبح
بله ميشه ، ميتونيد موقع ساختن نمونه شئ از Thread تون يك پارامتر بهش پاس بديد و تو روال Execute ترد اون پارامتر رو بررسي كنيد و بسته به مقدارش عمليات مورد نظر رو انجام بديد .

تجلی
یک شنبه 25 دی 1390, 12:22 عصر
خیلی متشکر .... جالب بود .. اینجوری آدم دیگه مجبور نیست برای هر کار ساده ای یک thread مجزا تعریف کنه .

اینطور که من متوجه شدم راه ساده پاس دادن یک مقدار به thread این هست که موقع تعریف thread یک متغیر هم بهش اختصاص بدیم و موقع ایجاد thread ساخته شده به این متغیر هم مقدار بدیم .
اما مثل اینکه یه راه دیگه هم وجود داره اگر اینطوره بی زحمت اون رو هم توضیح مختصر بدید .

Felony
یک شنبه 25 دی 1390, 17:30 عصر
ميتونيد Constructor سازنده ترد رو Override كنيد تا يك پارامتر به عنوان ورودي بگيره .

تجلی
سه شنبه 27 دی 1390, 00:28 صبح
متشکر
حالا یه سوال دیگه :

چرا باید پراپرتی ها و متدهای اشیاء ویژوال فرم فقط از طریق synchronize کردن تغییر پیدا کنند در حالی که همینجوری هم میشه در یک thread اونها رو تغییر داد .

ضمن اینکه دلفی در این مورد از لغت use استفاده میکنه .>>

Important: Methods and properties of objects in visual components can only be
used in a method called using Synchronize,
آیا استفاده از این لغت این مفهوم رو میرسونه که در یک thread ما حتی اجازه نداریم مثلا مقدار TextEdit.text رو مستقیما از شی ویژوال بگیریم ؟ یا اینکه این محدودیت فقط برای ارسال اطلاعات به فرم هست و نه دریافت اطلاعات از اون ؟

واصلا معلوم هست اگر این قانون رو رعایت نکنیم چه مشکلی ایجاد میکنه ؟

gbg
سه شنبه 27 دی 1390, 08:26 صبح
خب این کار برای جلو گیری دسترسی هم زمان به یه شی ویژوال هست که ممکنه تداخل به وجود بیاره

تجلی
سه شنبه 27 دی 1390, 19:06 عصر
متشکر .
اما من متوجه نشدم این دسترسی همزمان به شی ویژوال فقط موقع ارسال اطلاعات به شی ویژوال برای ما مطرحه یا برای دریافت اطلاعات توسط یک thread از یک شی ویژوال هم باید ترفندی رو در نظر گرفت .