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

نام تاپیک: ریسمان ها

  1. #1
    کاربر دائمی آواتار meysam_meysam74
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    رشت
    پست
    197

    Question ریسمان ها

    سلام به همه
    خوب به کمک ریسمان ما میتونیم چنتا کارو با هم انجام بدیم حالا مشکل اینجاست که اگه ما یه ریسمان مستقل درست کنیم دیگه اون ریسمان از برنامه ما جداست و به برنامه دسترسی نداره مثلا اگه من بنویسم که listbox1.add Err میگیره یا اصلا هر ocx دیگه ای ممکنه توضیع بدین که چه جوری میشه از داخل ریسمان به اتم های برنامه دسترسی داشت !

  2. #2

    نقل قول: ریسمان ها

    شما می توانید Thread تان را به یک متد پارامتردار گره بزنید.به این صورت که :(یک همچین چیزی)

    class class1
    {
    void Method1(object Parameter)
    {
    }
    }
    .
    .
    .
    Class1 c = new Class1();
    ParameterizedThreadStart pts= new ParameterizedThreadStart(c1.Method1);
    Thread t = new Thread(pts);
    t.Start(new Object());

    که شما می توانید به جای new Object() پرارمتر خود را به Thread پاس بدهید.
    اگر Net. نمی دانید وارد نشوید.

  3. #3
    کاربر دائمی آواتار meysam_meysam74
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    رشت
    پست
    197

    نقل قول: ریسمان ها

    ممنون از تایپ ولی این الگریتم فکر نکنم برایه vb.net 8 باشه بیشتر به vC++‎ میخوره
    من نتونستم ازش استفاده کنم اگه امکان داره وضه تر توضع بدین

  4. #4

    نقل قول: ریسمان ها

    مثال بالا به زبان C#‎ است.
    http://msdn.microsoft.com/en-us/libr...readstart.aspx
    اگر Net. نمی دانید وارد نشوید.

  5. #5

    نقل قول: ریسمان ها

    خوب به کمک ریسمان ما میتونیم چنتا کارو با هم انجام بدیم حالا مشکل اینجاست که اگه ما یه ریسمان مستقل درست کنیم دیگه اون ریسمان از برنامه ما جداست و به برنامه دسترسی نداره
    Threadهایی که شما در یک برنامه درست می کنید، وابسته به Thread اصلی برنامه هستند. اینطور نیست که اون Thread از برنامه شما جدا باشه.

    توضیع بدین که چه جوری میشه از داخل ریسمان به اتم های برنامه دسترسی داشت !
    دقت داشته باشید که کنترل های ویندوز که در رابط گرافیکی کاربر بکار میرند، Thread-Safe نیستند و شما نباید از طریق یک Thread دیگه کنترل های رابط کاربر را تغییر بدید! غیر از اینکه در مستندات های مربوط به دات نت اعلام شده باشه که کلاس های دات نتی که کنترل های رابط کاربر ویندوز را Wrap می کنند، در داخل خود مکانیزمی را برای استفاده از این کنترل ها بصورت Thread-safe فراهم کردند.
    احتمالا همچین مکانیزمی در دات نظر گرفته نشده. در هر حال، قبل از انجام کاری که مطرح کردید، حتما مسئله ایی که اشاره کردم را بررسی کنید تا بعدا به مشکلات عجیب و غریب گرفتار نشید.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  6. #6
    کاربر دائمی آواتار meysam_meysam74
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    رشت
    پست
    197

    نقل قول: ریسمان ها

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

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

    مراحل استفاده از ریسمان تویه ویبی دات نت اینجوری هست

    Imports
    System.Threading
    Dim Therd1 As Thread
    Therd1 = New Thread(AddressOf FunctionNAme)
    خوب حالا من میخوام به جایه این

    Therd1.Start()
    از این استفاده کنم

    Therd1.Start(Parameter)
    امکان داره یه نمونه بارم بزارین یا یه توضیع کچیک بدین که من چه جوری باید به تبع خودم ورودی بدم !

  7. #7

    نقل قول: ریسمان ها

    مسئله Thread-Safe نبودن بسیاری از دستورات دات نت، هنگامی برای ما مشکل زا می شود که چند thread به خواهند بطور همزمان آن تکه از کد ما را اجرا کنند. و در این حالت بایستی همواره این مورد را در نظر بگیریم که حتی ممکن است در وسط اجرای یک دستور تخصیص ممکن است کنترل از thread ما خارج و به thread دیگری برود. که راه حلهای برای آن نیز وجود دارد از جمله lock کردن قطعه کدمان که می خواهیم تا انتها توسط thread مان اجرا شود.
    بدیهی است که این مشکل هنگامیکه یک thread اکتیو داشته باشیم اصلاً وجود نخواهد داشت.
    همچنین من تا این جا نخوانده ام که "نباید از طریق یک Thread دیگه کنترل های رابط کاربر را تغییر بدید"
    اگر Net. نمی دانید وارد نشوید.

  8. #8
    کاربر دائمی آواتار amirsajjadi
    تاریخ عضویت
    آبان 1385
    محل زندگی
    خراسان رضوی - سبزوار
    سن
    37
    پست
    871

    نقل قول: ریسمان ها

    با سلام
    قبل از استارت کردن thread باید از این قطعه کد استفاده کنی

    Control.CheckForIllegalCrossThreadCalls =
    False

  9. #9

    نقل قول: ریسمان ها

    بدیهی است که این مشکل هنگامیکه یک thread اکتیو داشته باشیم اصلاً وجود نخواهد داشت.
    وقتی یک Thread جدید به برنامه اضافه می کنید، دیگه یک Thread فعال ندارید، بلکه دو تا Thread فعال دارید:
    1- Thread اصلی برنامه
    2- Thread ایی که جدیدا ساختید.

    همچنین من تا این جا نخوانده ام که "نباید از طریق یک Thread دیگه کنترل های رابط کاربر را تغییر بدید"
    خیلی چیزها هست که من و شما هنوز نخوندیم:
    http://msdn.microsoft.com/en-us/libr...28(VS.80).aspx


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  10. #10
    کاربر دائمی آواتار meysam_meysam74
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    رشت
    پست
    197

    نقل قول: ریسمان ها

    ممنون اقا امیر مشکل من تویه سرس با این کد حل شد

    Control.CheckForIllegalCrossThreadCalls = False

    من یه سوال دیگه داشتم .
    موقعی که ما دارم از 5 ریسمان تویه برنامه استفاده میکنیم می تونم به یکی از اونا اولویت برتری بدیم که کارایه این ریسمان زود تر انجام بشه نسبت به 4 تا ریمان دیگه
    اگه هم کسی در مورد ارسال پارامتر به تابعی که با ریسمان اجرا میشه چیزی میدونه بگین به خدا جای دوری نمیره !

  11. #11

    نقل قول: ریسمان ها

    مشکل من تویه سرس با این کد حل شد
    کد بالا مشکل شما را حل نکرد، بلکه صورت مسئله رو پاک کرد! CheckForIllegalCrossThreadCalls بطور پیش فرض True هست تا اجازه نده شما وضعیت یک کنترل را از داخل Thread ایی غیر از Thread ایی که اون کنترل را ساخته، تغییر بدید. چون ممکن هست در شرایط خاصی، بعضی از برنامه نویس ها نیاز داشته باشند که این عملکرد را غیرفعال کنند، امکان False کردن آن هم فراهم شده. مسئله شما شامل اون شرایط خاص نمیشه، بلکه با False کردن این خصوصیت عملا به دات نت میگید، من میدانم تغییر وضعیت یک کنترل از طریق یک Thread دیگه چه تبعاتی به همراه داره، پس تو گیر نده! در حالی که سوال شما و جواب دوستان شما نشون میده که اطلاعی از این موضوع ندارید و همین موضوع میتونه بعدها که پروژه پیشرفت بیشتری کرد، موجب دردسرهای زیادی براتون بشه. الان متوجه گیرهای Multi-threading نمیشید، وقتی توی برنامه تون مشکلی پیش میاد و با هر ابزار دیباگی که کد را بررسی می کنید، نمی تونید علت مشکل را متوجه بشید، یادتون میاد که Multi-threading قلق های خودش رو داره و اگر بخواد گیر بده، روزگار آدم سیاه میشه!
    برای اطلاع بیشتر از CheckForIllegalCrossThreadCalls:
    http://blogs.msdn.com/jfoscoding/arc...12/416910.aspx


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  12. #12
    کاربر دائمی آواتار meysam_meysam74
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    رشت
    پست
    197

    نقل قول: ریسمان ها

    نمیدونم بعد از یه مدت وقتی یه ocx جدید به پروژم اظافه کردم (ocx قدیمی بود)دیگه اصلان با ocx های خود vb.net هم نمیشد کار کرد خطا : میگفت که این ocx تک ریسمانی هست یه چیزی تویه انی مایع ها
    بی خیال ریمان فعلا شدم کدا رو تویه یه تایمر جا به جا کردم

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

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