آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

توقف یک رشته و ادامه ی کار !

مجتبی یگانه  12 سال پیش  12 سال پیش
+3 0

ما دستورات  | Thread.stop  | Start |  destroy  و .. رو داریم ، ولی واقعا هیچ کدوم کار نمیکنه ! وقتی استفاده میشن برنامه کرش میکنه !

خالا قصد کنترل رشته رو با متغییری داشتم ، که وقتی یه بار false میشه ، دیگه اون While داخل رشته  اجرا نمیشه ! 

و چند حقه ی دیگه که نگرفت ! ، توی Stack از یه کلاس که از Thread اکستندز شده بود استفاده کرده بودن ولی به درد من نخورد و متوجه نحوه ی کارش نشدم و نتونستم ازش استفاده کنم 

لطفا دوستانی که میخوان سورس بزارن ، سورس یه ترد که مقدار یه شمارنده رو چاپ کنه و با کلیک رویه یه دکمه puase و resume بشه رو بزارید  ، یعنی ثانیه شماری که قابلیت توقف و شروع مجدد داشته باشه !

 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
pupil  12 سال پیش
+1 0

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

متن زیر شیوه منه هرچند خیلی شاید بی سواد وار باشه

کلاس تردم که خیلی شبیه استاده 

 public class ThreadCounter extends Thread {

    public static int     seconds;
    private static int    counter;
    private TextView      textView;
    public static boolean pauseThread;
    public static boolean stopThread;


    public void stopThread(int value) {
        if (value == 0) {
            stopThread = true;
        } else if (value == 1) {
            stopThread = false;
        }
    }


    public void pauseThread(int value) {
        if (value == 0) {
            pauseThread = true;
        } else if (value == 1) {
            pauseThread = false;
        }
    }
      public void setSeconds(int value) {         
sec>
counter = seconds; } public void setTextView(TextView value) { textView = value; } @Override public void run() { super.run(); while (counter > 0 && stopThread) { if (pauseThread) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } counter--; if (textView != null) { G.HANDLER.post(new Runnable() { @Override public void run() { int min = (int) Math.floor(counter / 60); int sec = counter % 60; String minPrefix = ""; if (min < 10) { minPrefix = "0"; } String secPrefix = ""; if (sec < 10) { secPrefix = "0"; } Log.i("LOG", "Counter: " + counter); textView.setText(minPrefix + min + ":" + secPrefix + sec); } }); } } } G.HANDLER.post(new Runnable() { @Override public void run() { if (stopThread == true) { Toast.makeText(G.context, "وقت شما تمام شده است", Toast.LENGTH_SHORT).show(); } } }); } }

 

اینم یه دیالوگه سه تا دکمه داره ok برای بستن دیالوک و...

 TextView btnTimeOk = (TextView) timeDialog.findViewById(R.id.btnTimeOk);
        TextView btnTimePause = (TextView) timeDialog.findViewById(R.id.btnTimePause);
        TextView btnTimeResume = (TextView) timeDialog.findViewById(R.id.btnTimeResume);
        final TextView txtTime = (TextView) timeDialog.findViewById(R.id.txtTimeDialog);
        btnTimeResume.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (ThreadCounter.pauseThread == false) {
                    counter.pauseThread(0);

                }

            }
        });
        btnTimePause.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (ThreadCounter.pauseThread == true) {
                    counter.pauseThread(1);

                }

            }
        });
        btnTimeOk.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                timeDialog.dismiss();

            }
        });

        counter.stopThread(0);
        counter.pauseThread(0);
        counter.setSeconds(100);
        counter.setTextView(txtTime);
        counter.start();

متد و فیلد threadStop برای دکمه  back نوشتم

راستی یه سوال اگه خواستی جواب بده چند سالته کمی از خودت بگو دوس دارم آشناتر شم باهات اگه خواستی من خطو جمعه حذف میکنم

پاسخ به سوال 
مجتبی یگانه  12 سال پیش
+1 0

 
package ir.negano;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


public class main extends Activity {

    int     value;
    Boolean state         = false;
    Thread  counterThread = new Thread();


    private void checkThread()
    {

        counterThread = new Thread(new Runnable() {

            @Override
            public void run() {
                while (state)
                {
                    Log.i("negano", "value is " + value);
                    value++;
                    try {
                        Thread.sleep(1000);
                    }
                    catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

            }
        });
        counterThread.start();
    }


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button btnswitch = (Button) findViewById(R.id.btnswitch);

        btnswitch.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                state = !state;
                checkThread();
            }
        });
    }
}

اینم سورس کامل توقف رشته ، فقط یه باتن ایجاد کنید ، ایدی بدید و لاگ رو ببینید !

 


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .