PDA

View Full Version : سوال: مشکل در مورد مبحث چند نخی



JaVa
دوشنبه 22 اسفند 1390, 18:39 عصر
سلام...
:متفکر:
مشکل این چیه؟


Dim t As New Threading.Thread(AddressOf speack)
Dim voice As New SpeechLib.SpVoice
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
t.Start()
End Sub
Private Sub speack()
voice.Speak(txtspech.Text)

End Sub
Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll
voice.Rate = TrackBar1.Value
End Sub


با تشکر لطفا مفصل توضیح بدید...
تنک یو وری ماچ

JaVa
دوشنبه 22 اسفند 1390, 18:43 عصر
این کد خط چی میگه؟

CheckForIllegalCrossThreadCalls = False

فرید نجفلو
دوشنبه 22 اسفند 1390, 20:27 عصر
این کد خط چی میگه؟

CheckForIllegalCrossThreadCalls = False

ببنید وقتی شما یک نخ (Thread) جدید تو فرم استارت می کنید اون درسته که از فرم آغاز شده ولی مستقلا اجرا می شه و از طرف دیگه به اشیا فرم هم دسترسی داره حالا اگه این نخ اگه بخواد به کنترل های فرم دسترسی پیدا کنه(در حالت Cross) دات نت چون تشخیص می ده این جدا از نخ فرمه تو ران تایم خطا می گیره
واسه همین اگه تو نخی که می خوایم استارت کنیم به کنترل های فرم دسترسی پیدا می کنیم با این خط به JIT اعلام می شه که از اعلام این خطا چشم پوشی کنه و اجازه دسترسی بده
در این حالت (استفاده از کنترل ها) باید همگام سازی یا قفل گذاری رو به دقت اجرا کنید

واسه اطلاعات بیشتر به اینجا هم سر بزن
آموزش جامع Threading و مباحث مریوطه مثل synchronization (http://barnamenevis.org/showthread.php?275344-آموزش-جامع-Threading-و-مباحث-مریوطه-مثل-synchronization&highlight=%D8%A2%D9%85%D9%88%D8%B2%D8%B4+Threading )

JaVa
دوشنبه 22 اسفند 1390, 20:37 عصر
من هر بار که برنامه رو Run می کنم سرعت سیستم با سرعت برنامه میاد پایینتر:قهقهه:
مشکلش مربوط به نخه.

برای خاتمه دادن به کار نخ از این دستور با ید استفاده بشه
t.Abort
یا
t.IsBackground = True

فرید نجفلو
دوشنبه 22 اسفند 1390, 23:25 عصر
من هر بار که برنامه رو Run می کنم سرعت سیستم با سرعت برنامه میاد پایینتر:قهقهه:
مشکلش مربوط به نخه.



دوست عزیز باید توجه کنید که چند نخی یه شمشیر دولبه ست اگه درست استفاده نشه

hakim22
شنبه 27 اسفند 1390, 16:05 عصر
دوست عزیز وقتی داری از چن نخی استفاده می کنی برای تغییر پارامترهای کنترل های درون فرم باید از delegate استفاده کنی و در ضمن از متد Invoke استفاده کنی که تشخیص بدی آیا تغییر ThreadSafe هست یا نه .

ولی خیلی راحت می تونی بجای دردسر طراحی دستی یک برنامه چند نخی از کنترل backgroundWorker استفاده کنی ، کار باهاش خیلی راحتی و دیگه هیچ دردسری نداری چون خودش مدیریت تغییرات را و ThreadSafe بودن رو کنترل می کنه، از رویداد ProgressChanged تغییر خصوصیات هر شی استفاده کن

در هر صورت وقتی ویندوز به هر نخ میرسه برای چند هزارم ثانیه اجراش می کنه و به نخ بعدی پرش می کنه ، اینجوری به نظر میاد که همه ی برنامه ها درحال اجرای همزمان هستند در حالی که اینطوری نیست. دیگه تشخیص اینکه هر نخ کی و چقد بیشتر اجرا بشه تا کارش تموم بشه با ویندوزه ، باید مطلاعاتی در زیمنه AppDomainها انجام بدید تا جزئیاتش مشخص بشه

mo5tafa
پنج شنبه 28 دی 1391, 09:04 صبح
.. حذف شود ..