PDA

View Full Version : گرفتن آی دی یا نام ترد در حال اجرا



samin_panahi
دوشنبه 15 دی 1393, 14:28 عصر
سلام
یه برنامه می خوام بنویسم که در اون چندتا ترد یک تابع رو اجرا می کنن حالا می خوام هر بار که یکی از ترد ها تابع رو اجرا کرد اون رو در خروجی نمایش بدم
یعنی بگم ترد اول داره الان داره تابع رو استفاده می کنه و...

توی سرچ به این برخورد کردم اما نمی دونم چطور باید ازش استفاده کنم، استفاده که می کنم خروجی مناسب نمی ده!!!
من سه تا ترد دارم اما خروجی می ده 9 یا 10 یا 8 ... اعداد بی ربط می ده

System.Threading.Thread.CurrentThread.ManagedThrea dId.ToString();

SabaSabouhi
دوشنبه 15 دی 1393, 15:01 عصر
سلام
یه Solution تو Visual Studio بساز که 10 تا پروژه توش باشه، وقتی کامپایل می‌کنی. ترتیب کامپایل شدن که تو پنجره Output قابل مشاهده هست، مثل خروجی برنامه‌ی شما هست. این طبیعت MultiThreading هست که Threadها توی یه صف و به نوبت اجرا نمی‌شن.
البته این یه ضعف نیست و نقطه‌ی قوت هست. مهم اینه که طراحی درست باشه و بدونیم که از MultiThreading چی می‌خوایم.

البته من صورت مساله شما رو نمی‌دونم، اما در کل با دیدن ترتیب‌های ناموزون خیلی نباید تعجب کنی.

صبا صبوحی

samin_panahi
دوشنبه 15 دی 1393, 16:46 عصر
خروجی رو نا موزون نمی ده
همیشه یکی میده
اونم تا جایی که متوجه شدم واسه اینه که گویا فقط یکی از ترد ها داره کار می کنه
اما مساله اینه که چرا 8 می ده؟ من که سه تا ترد بیشتر ندارم!!!
اگر name ترد رو هم بخوام خالی می ده
در مورد اینکه گفتید هم



یه Solution تو Visual Studio بساز که 10 تا پروژه توش باشه، وقتی کامپایل می‌کنی. ترتیب کامپایل شدن که تو پنجره Output قابل مشاهده هست، مثل خروجی برنامه‌ی شما هست. این طبیعت MultiThreading هست که Threadها توی یه صف و به نوبت اجرا نمی‌شن.


دقیق متوجه نشدم باید چکار کنم!

SabaSabouhi
سه شنبه 16 دی 1393, 12:09 عصر
سلام
چند تا پرسش:
1. آیا به Threadها اسم دادی؟
2. خروجی به چه شکلی هست؟ WinForm یا Console؟
3. چطوری روی خروجی می‌نویسی؟ آیا از Invoke استفاده می‌کنی؟

صباصبوحی

samin_panahi
سه شنبه 16 دی 1393, 13:26 عصر
سلام
چند تا پرسش:
1. آیا به Threadها اسم دادی؟
2. خروجی به چه شکلی هست؟ WinForm یا Console؟
3. چطوری روی خروجی می‌نویسی؟ آیا از Invoke استفاده می‌کنی؟

صباصبوحی

1. دقیق بلد نیستم اما یه بار نام براش تعیین کردم بریک می کنه

Thread1.Name = "F";
Thread1 = new Thread(test);
MessageBox.Show(Thread.CurrentThread.Name);


2. winform
3. بله

SabaSabouhi
سه شنبه 16 دی 1393, 15:00 عصر
سلام
اول این که متوجه منظورت از «بریک می‌کنه» نشدم.
آیا منظورت اینه که برنامه خطا می‌ده؟ خوب طبیعی هست که خطا بده، چون تو این کدی که نوشتی
قبل از new کردن داری بهش مقدار می‌دی. جای دو خط رو عوض کن.

MultiTheading ضمن این که خیلی ساده و به درد بخور هست، یه مبحث حرفه‌ای هست یعنی باید
تمام کارها رو درست انجام بدی تا درست کار کنه.
اگه می‌شه کد رو بگذار اینجا تا بلکه مشکل رو پیدا کنم.
چون گفتی که از Invoke استفاده کردی، پس باید خروجی بگیری، مگه این که بقیه Threadها اجرا
نشده باشن یا این که به دلیل زمانبندی نامناسب وقت بهشون نرسه و یا این که Lock شده باشن.
بدون دیدن کد مربوطه نمی‌شه حدس زد مشکل از کجاس

صباصبوحی