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

نام تاپیک: وقفه ی چند ثانیه ای میان تابع بازگشتی و از سرگیری دوباره آن

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1391
    پست
    30

    وقفه ی چند ثانیه ای میان تابع بازگشتی و از سرگیری دوباره آن

    سلام

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

    هر چه با ترد ها امتحان کردم نشد!

    تابع بازگشتی من چون از کلاس graphics برای کشیدن چیزی استفاده میکند، ترد ها باعث میشوند که بجای اینکه آنچه میخواهم بکشم، ذره ذره کشیده شود؛ مدتی توقف داشته باشد و سپس یکباره باهم کشیده شود! من نمیخواهم اینطور باشد! بلکه من میخواهم آنچه قرار است تابع بازگشتی نمایش دهد، به تدریج نمایش داده شود.

    باید چه کنم؟

  2. #2
    کاربر تازه وارد
    تاریخ عضویت
    اسفند 1389
    محل زندگی
    تهران - باراجين
    سن
    31
    پست
    56

    نقل قول: وقفه ی چند ثانیه ای میان تابع بازگشتی و از سرگیری دوباره آن

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

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

    هر چه با ترد ها امتحان کردم نشد!

    تابع بازگشتی من چون از کلاس graphics برای کشیدن چیزی استفاده میکند، ترد ها باعث میشوند که بجای اینکه آنچه میخواهم بکشم، ذره ذره کشیده شود؛ مدتی توقف داشته باشد و سپس یکباره باهم کشیده شود! من نمیخواهم اینطور باشد! بلکه من میخواهم آنچه قرار است تابع بازگشتی نمایش دهد، به تدریج نمایش داده شود.

    باید چه کنم؟

    اگه میخواهی وقفه داشته باشه که میتونی تو ترد از متد sleep استفاده کنی ولی اگه میخوای روتین و بدون وقفه انجام بشه بحث ــش جداست

  3. #3
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1391
    پست
    30

    نقل قول: وقفه ی چند ثانیه ای میان تابع بازگشتی و از سرگیری دوباره آن

    فکر کنم منظورم را متوجه نشدید !!!!

    من در یک کلاس، متد PaintComponent(Graphics g) را دارم که درون این متد، یک تابع بازگشتی صدا شده است.
    این تابع بازگشتی با روش تقسیم و غلبه نوشته شده است، و من چهار زیرمساله در آن دارم. قصد من این است که میخواهم هر زیرمساله ی کوچک که حل شد، نتیجه اش همان موقع نشان داده شود؛ نه زمانی که کل زیرمسائل حل شدند!
    از sleep استفاده کردم اما به جای اینکه درون تابع بازگشتی من وقفه بیندازد، با اجرا شدن برنامه، مدتی صبر میکرد و بعد نتیجه ی تابع بازگشتی را یکدفعه باهم نشان میداد.
    همان طور که گفتم من میخواهم نتیجه به تدریج نشان داده شود و sleep این خواسته ی من را برآورده نکرد!

  4. #4
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1391
    محل زندگی
    nowhere
    پست
    30

    نقل قول: وقفه ی چند ثانیه ای میان تابع بازگشتی و از سرگیری دوباره آن

    اگه کد رو قرار بدید بهتر میشه کمک کرد.

  5. #5
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1391
    پست
    30

    نقل قول: وقفه ی چند ثانیه ای میان تابع بازگشتی و از سرگیری دوباره آن

    میخوام فرآیند کشیدن رو بطور تدریجی نشون بده:

    	public void paintComponent(Graphics g){
    super.paintComponents(g);
    x1=32; x2=672; y1=5; y2=672;
    g.drawRect(32, 5, 640, 640);
    while(x1!=x2 && y1!=y2){
    x1+=m;
    y1+=m;
    g.drawLine(x1, 5, x1, 645);
    g.drawLine(32, y1, 672, y1);
    }

    Tiling(g,32,5,k,m-1,4);

    }

    private void Tiling(Graphics g,int x, int y, int k,int m, int s) {

    if(k==1 && s==1 && t){
    g.setColor(Color.red);
    g.fillRect(x+1, y+m+2, m, m);
    g.fillRect(x+m+2, y+1, m, m);
    g.fillRect(x+m+2, y+m+2, m, m);
    }
    else if(k==1 && s==2 && t){
    g.setColor(Color.blue);
    g.fillRect(x+1, y+1, m, m);
    g.fillRect(x+1, y+m+2, m, m);
    g.fillRect(x+m+2, y+m+2, m, m);
    }
    else if(k==1 && s==3 && t){
    g.setColor(Color.green);
    g.fillRect(x+1, y+1, m, m);
    g.fillRect(x+m+2, y+1, m, m);
    g.fillRect(x+m+2, y+m+2, m, m);
    }
    else if(k==1 && s==4 && t){
    g.setColor(Color.magenta);
    g.fillRect(x+1, y+1, m, m);
    g.fillRect(x+1, y+m+2, m, m);
    g.fillRect(x+m+2, y+1, m, m);
    }

    else if(k!=1){
    if(s==1){
    Tiling(g,x,y,k-1,m,1);
    Tiling(g,x+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),y,k-1,m,3);
    Tiling(g,x,y+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),k-1,m,2);
    Tiling(g,x+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),y+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),k-1,m,1);
    //merge
    Tiling(g,x+((int)(Math.pow(2,k-2))*m)+(int)(Math.pow(2,k-2)),y+((int)(Math.pow(2,k-2))*m)+(int)(Math.pow(2,k-2)),k-1,m,1);
    }
    else if(s==2){
    Tiling(g,x,y,k-1,m,4);
    Tiling(g,x+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),y,k-1,m,2);
    Tiling(g,x,y+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),k-1,m,2);
    Tiling(g,x+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),y+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),k-1,m,1);
    //merge
    Tiling(g,x+((int)(Math.pow(2,k-2))*m)+(int)(Math.pow(2,k-2)),y+((int)(Math.pow(2,k-2))*m)+(int)(Math.pow(2,k-2)),k-1,m,2);
    }
    else if(s==3){
    Tiling(g,x,y,k-1,m,4);
    Tiling(g,x+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),y,k-1,m,3);
    Tiling(g,x,y+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),k-1,m,3);
    Tiling(g,x+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),y+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),k-1,m,1);
    //merge
    Tiling(g,x+((int)(Math.pow(2,k-2))*m)+(int)(Math.pow(2,k-2)),y+((int)(Math.pow(2,k-2))*m)+(int)(Math.pow(2,k-2)),k-1,m,3);
    }
    else if(s==4){
    Tiling(g,x,y,k-1,m,4);
    Tiling(g,x+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),y,k-1,m,3);
    Tiling(g,x,y+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),k-1,m,2);
    Tiling(g,x+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),y+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),k-1,m,4);
    //merge
    Tiling(g,x+((int)(Math.pow(2,k-2))*m)+(int)(Math.pow(2,k-2)),y+((int)(Math.pow(2,k-2))*m)+(int)(Math.pow(2,k-2)),k-1,m,4);
    }
    }
    }

  6. #6
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1391
    محل زندگی
    nowhere
    پست
    30

    نقل قول: وقفه ی چند ثانیه ای میان تابع بازگشتی و از سرگیری دوباره آن

    دوست عزیز اگه کلاس رو کامل قرار میدادید بهتر بود در هر صورت مشکل از ترد نیست و مشکل از الگوریتم شما است که اصلا شرط متد paintComponent پایان ناپذیره و طبیعتا کنترل اجرای برنامه به خطوط بعدی رجوع نمی کند که اگر میکرد کار با افسل الاسافلین بود(kidding).
    کد زیر رسم خط را با وقفه ای قابل مشاهده انجام میدهد.(البته نه چندان با کارایی بالا)
    [JAVA][/Jpublic void paintComponent(Graphics g, Thread t) {
    int x =0, y = 0;

    for(int i=0; i<100; i++) {
    g.drawLine(x, y, x+i, y+i);
    try { t.sleep(100); } catch (InterruptedException ie) {}
    }
    }AVA]

تاپیک های مشابه

  1. دستور ایجاد وقفه به مدت چند ثانیه
    نوشته شده توسط mehdi_RM در بخش برنامه نویسی در 6 VB
    پاسخ: 19
    آخرین پست: پنج شنبه 01 آذر 1397, 07:19 صبح
  2. ایجاد چند ثانیه وقفه در برنامه
    نوشته شده توسط behrad110 در بخش C#‎‎
    پاسخ: 1
    آخرین پست: یک شنبه 09 خرداد 1389, 12:23 عصر
  3. وقفه چند ثانیه ای در برنامه
    نوشته شده توسط amirferdowsi در بخش ASP.NET Web Forms
    پاسخ: 3
    آخرین پست: جمعه 29 تیر 1386, 00:16 صبح
  4. ایجاد وقفه چند ثانیه ای
    نوشته شده توسط mehdi.offline در بخش برنامه نویسی اسمبلی خانواده x86
    پاسخ: 4
    آخرین پست: دوشنبه 25 تیر 1386, 01:45 صبح
  5. Redirect پس از چند ثانیه...
    نوشته شده توسط MSYNK در بخش ASP.NET Web Forms
    پاسخ: 2
    آخرین پست: شنبه 27 تیر 1383, 12:02 عصر

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

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