PDA

View Full Version : آموزش: چند نخی در #C



ایمان اختیاری
یک شنبه 27 دی 1388, 15:52 عصر
بنام خداوند جان و خرد ..... که اجازه داد ما هم سهمی در ارتقای این سایت و قسمت محبوب #C داشته باشیم .
با اجازه ی بزرگترا :خجالت: قصد دارم چیزهایی رو که در مورد Thread -یا همون چند نخی خودمون- می دونم بگم ... امیدوارم که به کمک دوستان و برنامه نویسای محترم این یه تاپیک مرجع بشه که بچه ها به جای زدن پست جدید بتونن جواب مشکلاتشون رو اینجا پیدا کنن
اما ذکر چند نکته بسیار بسیار ضروریه :
- خواهش می کنم حتما قوانین (http://barnamenevis.org/forum/showthread.php?t=129082) رو بخونین و بهش عمل کنید ( برای راحتی کار خودتون می گم )
- نحوه ی ارائه ی این تاپیک قراره یه کم متفاوت تر با بقیه ی تاپیک ها باشه ... البته الان نمی گم تا یه کم که جلوتر بریم خودتون متوجه می شید که داستان از چه قراره ...
- خواهشا اگه سوالی ، انتقادی یا پیشنهادی بود برام پیام خصوصی بذارین و توی بحث مطلب متفرقه عنوان نکنید.
- اگه سوالی داشتین برام پیام خصوصی بذارید ( بابا مردیم از بس فارسی را پاس داشتیم .... Pm بزنین آقا ... PM )
- من نه ادعایی دارم که چیزی بلدم نه چیز دیگه ای ... بشر هم جایزالخطا ....
- مسلما افراد زیادی هستن که خیلی بیشتر از من می دونن .. پس Plz دست به دست هم دهیم به مهر .. این تاپیک را کنیم آباد ..
- توی این تاپیک فقط و فقط راجع به نخ و ریسمان و طناب و این جور چیزا بحث می شه نه یه کلمه بیشتر نه یه کلمه کمتر ...

با تشکر از اینکه به ........ های من گوش دادید ...:گیج:

ایمان اختیاری
یک شنبه 27 دی 1388, 16:03 عصر
مقدمه :
آقا نخ ( Thread ) اصلا چی هست ...
برای چه کاری خوبه ..
کجا استفاده کنیم ؟
کجا استفاده نکنیم ...
روش بهینه اش چیه ؟
و مطالب دیگه ...

فکر کنین یه برنامه می خواین بنویسید که چند تا کار رو با هم انجام بده ... هم یه سری داده ها رو از پایگاه داده بگیره ...هم یه سری عملیات پردازشی روی اطلاعات جاری انجام بده .. هم یه سری اطلاعات رو توی یه جدولی بریزه و این کارها رو هم باید با هم انجام بده خب شما چه طرحی پیشنهاد می کنید ؟
- برنامه به ترتیب این کارا رو انجام بده ..( همزمانی نقض می شه )
- چند تا برنامه بنویسیم که کارا رو با هم انجام بده ( بی خیال بابا )
- تکه های کد رو توی دکمه های مختلف بنویسیم و به ترتیب اجرا کنیم ( وقتی پردازش یکی طول بکشه برنامه هنگ می کنه حالا بشین تا برنامه جواب بده )
- بی خیال برنامه نویسی می شیم ( :متفکر: بد فکری هم نیست ها )

اینجاست که مایکروسافت به دادمون رسید و چند نخی رو توی net. پیاده سازی کرد و جمعی را از نگرانی برهانید.
یه جا یه مثالی خوندم بد نبود .. گفت چند نخی یعنی چند تا کتاب باز کنی یه گاز از این یه گاز از اون یه گاز از اون کی بخونی و بری جلو ... شاید مغز آدم قاط بزنه ولی پردازنده می تونه این کار رو انجام بده .... البته نکته ی ظریفی که اینجا هست اونه که ما واقعا همزمانی رو نداریم ( زیاد روی این مطلب مطمئن نیستم ولی فکر کنم این جوری باشه )یه شبیه سازی بسیار زیبا از همزمانی رو داریم که البته به بحث ما مربوط نمی شه ( به دلیل از کار افتادگی انگشتان گرامی ادامه ی بحث رو توی پست بعدی دنبال می کنیم )

csharpdoost
دوشنبه 04 بهمن 1389, 16:19 عصر
سلام
دوست عزیز اقای اختیاری از سال 88 تا الان 12 ماه و اندی رد شده نمیخواهید ادامه بدید؟

BEHZADnr
دوشنبه 04 بهمن 1389, 17:13 عصر
با اجازه ی بزرگترا :خجالت: قصد دارم چیزهایی رو که در مورد Thread -یا همون چند نخی خودمون- می دونم بگم ... امیدوارم که به کمک دوستان و برنامه نویسای محترم این یه تاپیک مرجع بشه که بچه ها به جای زدن پست جدید بتونن جواب مشکلاتشون رو اینجا پیدا کنن

با سلام
منم با نظر دوستمون csharpdoost (http://barnamenevis.org/member.php?142727-csharpdoost) موافقم
بهتر نیست بعد از یکسال دوباره شروع کنید و این بحث رو ادامه بدید

haghft
دوشنبه 04 بهمن 1389, 19:15 عصر
یکی از ساده ترین و بهترین راه هایی که تو multi theard یا همون چند نخی کردن میشه استفاده کرد استفاده از کنترل backgroundWorker هست.آموزشش کمی سخته و طولانیه برای همین من توضیح نمیدم و فقط طرز استفادشو میگم.اول باید این کنترلو از toolbox قسمت components وارد کنید.بعد روش دوبار کلیک کنید تا رویداد DoWork به قسمت کدنویسی اضافه بشه.در این رویداد میتونید اون کدهایی رو که قراره انجام بشه بنویسید.برای اجرای این رویداد باید از کد ذیل استفاده کنید:
backgroundWorker1.RunWorkerAsync();هر جام با این ارور رو به رو شدید:

Cross-thread operation not valid: Control '' accessed from a thread other than the thread it was created on. اون خط کدی که این ارورو میده داخل این کد به جای Error code بزارید:

Invoke(new MethodInvoker(delegate {Error Code}));
اگه لازمه بگید یه نمونه براتون آپ کنم.

HAMRAHSOFT.IR
سه شنبه 05 بهمن 1389, 08:42 صبح
نمونه بزاری که عالی میشه -یک نمونه براز که هنگام لود کردن اطلاعات فرم سفید نشه

haghft
سه شنبه 05 بهمن 1389, 10:51 صبح
اینم یه نمونه ساده.امیدوارم مفید باشه براتون.:لبخندساده: