PDA

View Full Version : كنترل ورودي - خروجي همزمان



smakhavan
دوشنبه 30 دی 1387, 16:47 عصر
سلام

من يه برنامه اي دارم مينويسم كه يك سري ورودي به آن ارسال ميشود و پس از يك سري عمليات خروجي توليد ميشه. اما سرعت توليد ورودي و خروجي ممكنه متفاوت باشه. براي همين ميخواهم اين دو تا كار به عنوان دو تا كار مستقل از هم باشند و اجرا بشوند.

مثال ساده شده اين كار (فايل ضميمه) اينه كه يه edit box داريم كه توسط كاربر اطلاعات داخلش تايپ ميشه و با زدن دكمه add اطلاعات به ليست باكس1 وارد ميشه. به محض ورود يك موجوديت به ليست 1 پردازش انجام ميشه و پس از انجام پردازش كه اينجا اون را با يك وقفه 5 ثانيه اي جايگزين كردم اطلاعات به ليست 2 منتقل ميشه و در صورت وجود اطلاعاتي در ليست 1 دوباره اين عمل تكرار ميشه.
من در اين مثال از يك تايمر استفاده كردم كه وجود اطلاعات را در ليست 1 چك بكنه. اما در اين بين ديگه كاربر نميتونه به كارش (ورود اطلاعات) ادامه بده (سرعت پايين پاسخگويي برنامه به تايپ و ...)
من بيشتر بانك اطلاعاتي كار كردم و چيزي درباره مولتي تردينگ نميدونم و فكر ميكنم كه راه حل اين مشكل استفاده از تردها باشه اما روش كار را باهاش بلد نيستم.

يه مقاله در سايت پيدا كردم كه مال آقاي مهري بود اما نتونستم چيزي ازش بفهم. كسي ميتونه من را راهنمايي كنه!؟

mossaferin
دوشنبه 30 دی 1387, 19:59 عصر
واژه Thread - Threading رو توی سایت سرچ کن مطلب زیاده

http://www.barnamenevis.org/forum/showthread.php?t=79463

یه سری هم به این تاپیک بزن
موفق باشی

smakhavan
سه شنبه 01 بهمن 1387, 07:52 صبح
يه مقاله در سايت پيدا كردم كه مال آقاي مهري بود


واژه Thread - Threading رو توی سایت سرچ کن مطلب زیاده
http://www.barnamenevis.org/forum/showthread.php?t=79463
یه سری هم به این تاپیک بزن
موفق باشی


گفتم كه سرچ كردم. اين را هم كه شما فرموديد ديده بودم اما نميتونم كارم را راه بيندازم. نميتونم ارتباط اينها را با اون چيزي كه من ميخوام پيدا كنم! مشكل از منه كه چيز زيادي در اين باره بلد نيستم

mossaferin
سه شنبه 01 بهمن 1387, 13:03 عصر
سلام

این هم چند تا مثال از ترد که میتونی مطالعه کنی تا با روش ها آشنا بشی و در نهایت کار خودتو پیاده سازی کنی

موفق باشی

vcldeveloper
سه شنبه 01 بهمن 1387, 16:31 عصر
نميتونم ارتباط اينها را با اون چيزي كه من ميخوام پيدا كنم!
یک Thread اصلی دارید که رابط گرافیکی کاربر را کنترل میکنه.
یک Thread خودتون درست می کنید که به یک لیست دسترسی داره. رابط کاربر هر بار در این لیست داده ایی قرار میده، و این Thread را با خبر میکنه. این Thread هم بعد از دریافت پیام، میره سراغ لیست، و داده های موجود در آن را یکی یکی پردازش میکنه. هر زمان کارش روی یکی از داده ها تمام شد، به Thread سوم اطلاع میده.
3- Thread سوم با پیام Thread دوم فعال میشه، لیست خودش را چک میکنه، و اگر داده جدیدی در آن بود، آن را پردازش میکنه.

هر کدام از Thread های دوم و سوم ممکن هست در صورت نیاز پیام هایی را به Thread اول، که مسئولیت رابط کاربر را برعهده دارد، ارسال کنند؛ مثلا برای با خبر کردن Thread اول از پیشرفت کار.


مشكل از منه كه چيز زيادي در اين باره بلد نيستم
باید تحقیق کنید. موضوعاتی که برای انجام این کار باید روی آنها تحقیق کنید:
1- مفهوم Thread و مباحث عمومی مربوط به Multi-threading.
2- تکنیک های مختلف همزمان سازی Thread ها؛ Thread Synchronization
3- بررسی مدل های متداول Threading در نرم افزار، مثل Pipeline Model یا Producer-Consumer Model.

smakhavan
چهارشنبه 02 بهمن 1387, 08:15 صبح
خيلي ممنون.
حالا كه بيشتر رفتم تو دل كار ديدم كه خيلي هم كار سختي نبود. فقط مشكل از اينجا بود كه من از اسم ترد واهمه داشتم و باهاش تاحالا كار نكرده بودم!! راست گفتن كه الناس اعداء ما جهلوا

vcldeveloper
چهارشنبه 02 بهمن 1387, 12:17 عصر
فقط مشكل از اينجا بود كه من از اسم ترد واهمه داشتم
Thread سختی خودش را در دو مقطع به وضوح نشون میده:
1- زمانی که باید Concurrent فکر کنید؛ یعنی باید دیدگاه سنتی خودتون درباره اجرای برنامه را تغییر بدید، و عادت کنید به اینکه کدهایی بطور موازی با هم در حال اجرا هستند.

2- زمانی که می خواید پروژه را Debug کنید؛ اون زمان که مثلا Threadها دچار Deadlock میشند، یا خطاهای عجیب و غریبی دریافت می کنید که نمی دونید از کدوم Thread بوده.

بطور کلی، نوشتن یک برنامه Multi-threaded خوب یک کار ساده محسوب نمیشه. این رو نگفتم که بترسید، بلکه گفتم که تصور نکنید کار با Threadها خیلی آسون هست.