نمایش نتایج 1 تا 29 از 29

نام تاپیک: چگونگی کار با Thread ها

  1. #1

    چگونگی کار با Thread ها

    سلام دوستان اگه کسی مطلبی در باره کار با Thread ها داره لطفا اینجا بذاره و اگه می تونه توضیح بده متشکر می شوم احتیاج زیادی به این مطلب دارم متشکرم

  2. #2
    کاربر دائمی آواتار Sharif Lotfi
    تاریخ عضویت
    شهریور 1384
    محل زندگی
    Tehran
    سن
    50
    پست
    285

    نقل قول: کار با Thread ها

    من هم نياز دارم تا در اين مورد بيشتر بدانم
    فكر كنم براي اجراي همزمان چند عمليات مثل كار كردن يك پروسس بار در هنگام فعاليت يك حلقه و ... كاربرد دارد
    دوستاني كه اطلاعاتي دارند لطفا كمك كنند

  3. #3
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    كشور فرشته گانِ اروپا سوئد
    پست
    368

    Smile Multi threaded Programming

    سلام ،
    این مطلب رو بخونین خوبه کمک می‌کنه بهتون موفق باشین
    Multi threaded Programming

  4. #4
    کاربر دائمی آواتار Sharif Lotfi
    تاریخ عضویت
    شهریور 1384
    محل زندگی
    Tehran
    سن
    50
    پست
    285

    نقل قول: کار با Thread ها

    كسي از دوستان هست كه يكم بيشتر روشنمون كنه ؟

  5. #5

    نقل قول: کار با Thread ها

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

    publicclassMyThread
    }
    functions
    {

    در داخل این کلاس توابعی را تعریف کنید مثلا یک تابع برای اتصال به پایگاه داده مثل زیر

    publicstaticvoid BackUpdataBase()
    {
    action1
    }

    حالا در برنامه خود میتوانید نخهایی را تعریف کنید بصورت زیر

    Thread T2 = newThread(newThreadStart(MyThread.BackUpdataBase));


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

    T2.Start();

    نخ شروع به اجرا میکند.
    من خودم سئوالات زیادی در مورد نخ ها دارم خوشحال میشم در این مورد بحث کنیم مثلا اینکه اگر به کمک یک نخ فرمی را نمایش دادیم بعد از تمام شدن نخ چطور ان فرم را ببندیم؟
    آخرین ویرایش به وسیله cimiarnm : دوشنبه 19 بهمن 1388 در 21:35 عصر

  6. #6
    کاربر دائمی آواتار Sharif Lotfi
    تاریخ عضویت
    شهریور 1384
    محل زندگی
    Tehran
    سن
    50
    پست
    285

    نقل قول: کار با Thread ها

    با تشكر از دوست عزيزمون
    از دوستان كسي هست كه ما رو بيشتر راهنمايي كنه . من برنامه اي دارم كه يكي دو جاي اون زمان خيلي زيادي رو مي بره تا كار محاسبه انجام بشه و امكان قطع اون رو تو كد ندارم
    حالا مي خوام يه دكمه تعريف كنم كه كاربر هر وقت خواست از ادامه ي كار منصرف بشه اونو بزنه و كار محاسبه وسط حلقه قطع بشه تا جايي كه اطلاع دارم تنها راه همين Thread هستش ولي با راهنمايي هاي دوستان هم هنوز كارم راه نيفتاده

  7. #7

    نقل قول: کار با Thread ها

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

    mytread()
    {
    if (bool==true)
    {
    Thread.CurrentThread.Abort();
    Thread.ResetAort();
    this.close();
    {
    {
    البته من خودم دارم تازه یاد میگیرم واسه همین خیلی مهارت ندارم
    دستور زیر هم نشون میده ترد تموم شده یا نه
    Thread.CurrentThread.IsAlive

  8. #8
    VIP آواتار gwbasic
    تاریخ عضویت
    اردیبهشت 1403
    محل زندگی
    تهران
    سن
    42
    پست
    982

    نقل قول: کار با Thread ها

    نقل قول نوشته شده توسط Sharif Lotfi مشاهده تاپیک
    با تشکر از دوست عزیزمون
    از دوستان کسی هست که ما رو بیشتر راهنمایی کنه . من برنامه ای دارم که یکی دو جای اون زمان خیلی زیادی رو می بره تا کار محاسبه انجام بشه و امکان قطع اون رو تو کد ندارم
    حالا می خوام یه دکمه تعریف کنم که کاربر هر وقت خواست از ادامه ی کار منصرف بشه اونو بزنه و کار محاسبه وسط حلقه قطع بشه تا جایی که اطلاع دارم تنها راه همین Thread هستش ولی با راهنمایی های دوستان هم هنوز کارم راه نیفتاده
    برای این کار کامپوننتی به نام Backgroundworker وجود دارد که باعث می شود کار زمانبر ما در Thread دیگری اجرا شود و در ضمن قابلیت کنسل کردن و گزارش روند کار را نیز دارد.
    برای آشنایی کامل با backgroundworker به لینک زیر مراجعه کنید:
    https://barnamenevis.org/showth...ckgroundworker

  9. #9

    نقل قول: کار با Thread ها

    سلام دوستان میخوام با thread برنامه ای بنویسم که در ساعتی خاص فرم اجرا شود .تشکر

  10. #10
    کاربر جدید آواتار ArenaSmi
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    تهران
    پست
    21

    نقل قول: کار با Thread ها

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

    publicclassMyThread
    }
    functions
    {

    در داخل این کلاس توابعی را تعریف کنید مثلا یک تابع برای اتصال به پایگاه داده مثل زیر

    publicstaticvoid BackUpdataBase()
    {
    action1
    }

    حالا در برنامه خود میتوانید نخهایی را تعریف کنید بصورت زیر

    Thread T2 = newThread(newThreadStart(MyThread.BackUpdataBase));


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

    T2.Start();

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

  11. #11

    Cool کار با Thread ها

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

  12. #12

    نقل قول: کار با Thread ها

    به نظرم از يك منيجر مركزي همراه با متغيرهاي عمومي در يك كلاس عمومي راه حل ساده اي باشد.

    البته احتمالا استاندارد نيست ولي كار را راه مي اندازد.

  13. #13

    Cool نقل قول: کار با Thread ها

    میشه کمی بیشتر توضیح بدید که دقیقاً منظورتون چی هست

  14. #14

    Cool نقل قول: کار با Thread ها

    دوستان عزیز
    فرض کنید 1000 کلاینت داریم که قرار هست یک سری فایل از سرور به این کلاینت ها یا برعکس منتقل بشه ...
    من می خوام 10 ترد ایجاد کنم و کلاینت ها رو بزارم توی یک صف
    و در هر لحظه سرور به 10 تا کلاینت ( 10 ترد ) اتصال برقرار کنه
    و هر کدوم از ترد ها که مارش تموم بشه، تابع اصلی این رو بفهمه و از صف کلاینت ها یک کلاینت دیگه رو خارج کنه و دوباره ترد رو ایجاد کنه
    1- چه جوری می تونم بفهمم که یک ترد کارش تموم شده ؟
    2- چه جوری میشه فهمید که یک ترد به مشکل برخورده ؟
    3- چه جوری بعد از اتمام کار یک ترد، اون رو از بین ببرم ؟

  15. #15

    Cool کار با Thread ها

    و سوال بعدی :
    4- یکی از این ترد ها قرار هستکه یک متغیر در برنامه اصلی رو مقدار دهی بکنه !
    حالا من چه جوری می تونم زمانی که اون متغیر تغییر پیدا کرد ، متوجه بشم، بدون اینکه مدام بخوام اون متغیر رو چک کنم و برنامه رو درگیر کنم ؟!؟!؟!

  16. #16
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: کار با Thread ها

    نقل قول نوشته شده توسط bpzone مشاهده تاپیک
    و سوال بعدی :
    4- یکی از این ترد ها قرار هستکه یک متغیر در برنامه اصلی رو مقدار دهی بکنه !
    حالا من چه جوری می تونم زمانی که اون متغیر تغییر پیدا کرد ، متوجه بشم، بدون اینکه مدام بخوام اون متغیر رو چک کنم و برنامه رو درگیر کنم ؟!؟!؟!

    برای مورد شما هرگز هرگز هرگز هرگز thread و TCP پیشنهاد نمیشه به چند دلیل:
    1.ERORRCODE = 0xc0000007 = STATUS_PAGEFILE_QUOTA
    برای جلوگیری از این خطا به دو فروند IntelCore i7 نیاز دارید
    چرا؟
    چون هر thread 24 kb از cache پردازنده شما رو نیاز داره.

    2.سرعتت مثل کشتی به گل نشسته میشه.
    3.مدیریتش خیلی سخته.
    4.configuraation خیلی زیادی نیاز داری.

    پس چه کا رکنی؟
    شما باید از RUDP یا UDP در صورت کم اهمیت بودن اطلاعات استفاده کنی.
    چرا؟
    1.فقط به چند تا thread نیاز دارید.
    2.configuarion به سختی TCP نیست(10% راحتتره)
    3.سرعتش بیشتره.
    4.اندازه header توش کمتره
    5.به علت تعداد thread کم دچار BSoD نمیشی.

  17. #17

    Cool کار با Thread ها

    نقل قول نوشته شده توسط FastCode مشاهده تاپیک
    برای مورد شما هرگز هرگز هرگز هرگز thread و TCP پیشنهاد نمیشه به چند دلیل:
    1.ERORRCODE = 0xc0000007 = STATUS_PAGEFILE_QUOTA
    برای جلوگیری از این خطا به دو فروند IntelCore i7 نیاز دارید
    چرا؟
    چون هر thread 24 kb از cache پردازنده شما رو نیاز داره.

    2.سرعتت مثل کشتی به گل نشسته میشه.
    3.مدیریتش خیلی سخته.
    4.configuraation خیلی زیادی نیاز داری.

    پس چه کا رکنی؟
    شما باید از RUDP یا UDP در صورت کم اهمیت بودن اطلاعات استفاده کنی.
    چرا؟
    1.فقط به چند تا thread نیاز دارید.
    2.configuarion به سختی TCP نیست(10% راحتتره)
    3.سرعتش بیشتره.
    4.اندازه header توش کمتره
    5.به علت تعداد thread کم دچار BSoD نمیشی.
    برای انتقال فایل ها از برنامه زیر استفاده می کنم


    private void btn_copy_Click(object sender, EventArgs e)
    {
    DirectoryCopy(@"\\210.12.0.233\ncr\archive", @".\temp_ncr_new", true);
    }

    private static void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs)
    {
    DirectoryInfo dir = new DirectoryInfo(sourceDirName);
    DirectoryInfo[] dirs = dir.GetDirectories();

    // If the source directory does not exist, throw an exception.
    if (!dir.Exists)
    {
    throw new DirectoryNotFoundException("Source directory does not exist or could not be found: " + sourceDirName);
    }

    // If the destination directory does not exist, create it.
    if (!Directory.Exists(destDirName))
    {
    Directory.CreateDirectory(destDirName);
    }


    // Get the file contents of the directory to copy.
    FileInfo[] files = dir.GetFiles();

    foreach (FileInfo file in files)
    {
    // Create the path to the new copy of the file.
    string temppath = Path.Combine(destDirName, file.Name);

    // Copy the file.
    file.CopyTo(temppath, false);
    }

    // If copySubDirs is true, copy the subdirectories.
    if (copySubDirs)
    {

    foreach (DirectoryInfo subdir in dirs)
    {
    // Create the subdirectory.
    string temppath = Path.Combine(destDirName, subdir.Name);

    // Copy the subdirectories.
    DirectoryCopy(subdir.FullName, temppath, copySubDirs);
    }
    }
    }
    اما سوالاتم در مورد نحوه کار با ترد همچنان باقی هست
    من برای انتقال فایل ها به سرور با استفاده از برنامه فوق ، تقریباً 10 ترد حداکثر به وجود میارم
    و برنامه رو با همون ترد ها انجام میدم ؟!؟!

    اما مجدداً و همچنان سوالات باقیست

  18. #18

    Cool چگونگی کار با Thread ها

    دوستان عزیز
    4 تا سوال ما رو کی جواب میده

  19. #19

    Cool چگونگی کار با Thread ها


    چه جوری می تونم بفهمم که یک ترد کارش تموم شده ؟

    چه جوری میشه فهمید که یک ترد به مشکل برخورده ؟

    چه جوری بعد از اتمام کار یک ترد، اون رو از بین ببرم ؟

    چه جوری ترد ها می تونن با هم ارتباط داشته باشن ؟

    میشه یک ترد رو متوقف کرد و بعد دوباره از ادامه فعالش کرد ؟




  20. #20
    کاربر دائمی آواتار jigily
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    زير سايه حضرت صاحب
    پست
    320

    نقل قول: کار با Thread ها

    حتما بايد از كلاس استفاده كنيم؟

  21. #21
    کاربر دائمی آواتار haghft
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    https://t.me/pump_upp
    پست
    400

    Cool نقل قول: چگونگی کار با Thread ها

    نقل قول نوشته شده توسط bpzone مشاهده تاپیک

    چه جوری می تونم بفهمم که یک ترد کارش تموم شده ؟

    چه جوری میشه فهمید که یک ترد به مشکل برخورده ؟

    چه جوری بعد از اتمام کار یک ترد، اون رو از بین ببرم ؟

    چه جوری ترد ها می تونن با هم ارتباط داشته باشن ؟

    میشه یک ترد رو متوقف کرد و بعد دوباره از ادامه فعالش کرد ؟



    حالات یک ترد با خاصیت ThreadState میتوانید بفهمید.
    برای از بین بردن یک ترد از theard.Join(); یا theard.Abort(); استفاده کنید.
    برای متوقف کردن یک ترد از theard.Suspend(); و برای ادامه آن از theard.Resume(); استفاده کنید.
    برای ارتباط دو ترد هم از این مقاله استفاده کن:
    http://www.codeproject.com/KB/thread...olmanager.aspx

  22. #22
    کاربر دائمی آواتار jigily
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    زير سايه حضرت صاحب
    پست
    320

    نقل قول: کار با Thread ها

    Cross-thread operation not valid
    نميدونم چرا اين پيغام ميده..كسي ميدونهههههههههه؟؟.

  23. #23

    نقل قول: چگونگی کار با Thread ها

    سلام،
    هر برنامه در ویندوز به عنوان یک Process شناخته می شه یعنی یک واحد اجرایی مستقل از سایرین. اما خود پردازش به تنهایی معنا ندارد، یک پردازش از حداقل یک یا بیش از یک نخ اجرایی Thread تشکیل شده است. Thread ها فضای پشته خاص خودشان را دارند و منابع پردازش مادر توسط Thread هایش به مشترک استفاده می شود Thread ها می توانند کد یکسانی را اجرا کنند و به متغیر های سراسری و منابع دیگر دسترسی دارند. در کل علت وجود Thread ها توزیع بار پردازش میان چند نخ اجرایی در جهت تسریع در رسیدن به خروجی می باشد.
    برای اطلاعات بیشتر Windows Internals را در گوگل جستجو کنید.

  24. #24
    کاربر دائمی آواتار haghft
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    https://t.me/pump_upp
    پست
    400

    نقل قول: کار با Thread ها

    نقل قول نوشته شده توسط jigily مشاهده تاپیک
    Cross-thread operation not valid
    نميدونم چرا اين پيغام ميده..كسي ميدونهههههههههه؟؟.
    اون کدی که دیباگر با این ارور هایلایت میکنه رو در درون این کد بگذارید:
    Invoke(new MethodInvoker(delegate {کد مورد نظر}));

  25. #25
    کاربر دائمی آواتار jigily
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    زير سايه حضرت صاحب
    پست
    320

    نقل قول: کار با Thread ها

    نقل قول نوشته شده توسط haghft مشاهده تاپیک
    اون کدی که دیباگر با این ارور هایلایت میکنه رو در درون این کد بگذارید:
    Invoke(new MethodInvoker(delegate {کد مورد نظر}));
    دوست عزيز مشكل حل شد واقعا ممنونم...
    اما ميشه توضيح بديد چه مشكلي داشت تا متوجه هم بشم...

  26. #26
    کاربر دائمی آواتار haghft
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    https://t.me/pump_upp
    پست
    400

    نقل قول: چگونگی کار با Thread ها

    ببینید یه مسأله ای هست که اجزای دو ترد به صورت عادی نمی توانند با هم ارتباط برقرار کنند بنابراین فرم و کنترل ها و کلا اجزای UI که در UI theard پیاده سازی می شوند و دستوراتی که شما در یک ترد جدید پیاده سازی میکنید نمی توانند باهم به صورت عادی ارتباط برقرار کنند و این مشکل پیش می آید پس باید با متد Invoke آن ها را صدا زد.

  27. #27

    نقل قول: چگونگی کار با Thread ها

    دمت گرم خان! مشکل منم حل شد LIKE

  28. #28

    نقل قول: چگونگی کار با Thread ها

    سلام من تو پروژه ام نیاز دارم بصورت موازی از یه پورت سریال داده دریافت کنم بعد جای دیگه از این داده های استفاده کنم داده های دریافتی رو به یه تکست باکس اضافه می کنم و در جای دیگه از تکست این تکست باکس استفاده می کنم تا رشته داخلشو پردازش کنم
    کد اون بخش اینه
    private void _spManager_NewSerialDataRecieved(object sender, SerialDataEventArgs e)
    {
    string str;
    if (this.InvokeRequired)
    {
    str = Encoding.ASCII.GetString(e.Data);
    this.BeginInvoke(new MethodInvoker(delegate
    {
    txtRecieveData.AppendText(str);
    }));
    return;
    }
    }

    حالا وقتی اجرا میشه تو کدی که به تکست باکس رشته اضافه میشه این خطا رخ میده مشکل چیه؟
    7.jpg

  29. #29
    کاربر دائمی
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    پونک
    سن
    42
    پست
    490

    نقل قول: چگونگی کار با Thread ها


قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •