ورود

View Full Version : چطوری برای یه قسمت از برنامه ام تایمر بذارم؟



ali zi zeperto
یک شنبه 08 اسفند 1389, 19:22 عصر
سلام
سوال رو باید توضیح بدم.
من یه سری داده رو از بانک اطلاعاتی می خونم و روی هم کدوم یه سری عملیت انجام می دم که شامل خوندن ز روی پورت هم میشه.حالا می خوام در هر مرحله که این while اجرا میشه 5 ثانیه فرصت باشه برای تکمیل عملیات.اگر کامل شد و داده ها خونده شد که شد اگر در مدت 5 ثانیه تکمیل نشد بره سراغ بعدی.
برای انجام اینکار چه مراحلی باید انجام بشه و از چه کلاسهایی باید استفاده کنم.کد نمی خوام فقط راهنمایی کنید که چیکار کنم .خودم سعی کردم با multithreading انجام بدم اما چون خیلی با جاوا آشنا نیستم و کلا تازه کارم دانسته ها کفاف نمی ده.راهنمایی لازم دارم.
ممنون

ali zi zeperto
دوشنبه 09 اسفند 1389, 20:33 عصر
سلام دوباره
با متد join کلاس thread یه کارایی کردم منتها یه راهی لازم دارم که thread رو از بین ببرم.destroy که انگار کار نمی کنه و سرچ هم کردم گویا راهی برای از بین بردن thread وجود نداره.درسته؟
اگر thread رو stop کنم باز هم cpu رو در گیر می کنه یا نه؟
راهنمایی

javaphantom
دوشنبه 09 اسفند 1389, 22:18 عصر
سلام دوباره
با متد join کلاس thread یه کارایی کردم منتها یه راهی لازم دارم که thread رو از بین ببرم.destroy که انگار کار نمی کنه و سرچ هم کردم گویا راهی برای از بین بردن thread وجود نداره.درسته؟
اگر thread رو stop کنم باز هم cpu رو در گیر می کنه یا نه؟
راهنمایی

چطور یک thread را کنترل کنیم


import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
* Created by IntelliJ IDEA.
* User: Babak
* Date: 2/28/11
* Time: 10:23 PM
* To change this template use File | Settings | File Templates.
*/
public class MyFrame extends JFrame {


private JButton myButton;
private JLabel myLabel;
private MyTimer myTimer;


public MyFrame() {
this.setBounds(new Rectangle(300,300));
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLayout(new FlowLayout());
this.getContentPane().add(this.getMyLabel());
this.getContentPane().add(this.getMyButton());
this.setVisible(true);

myTimer = new MyTimer(this);
Thread t = new Thread(myTimer);
t.start();

}

public JButton getMyButton() {
if (this.myButton == null) {
this.myButton = new JButton("start");
this.myButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (myButton.getText().equals("start")) {
myButton.setText("stop");
synchronized (myTimer) {
myTimer.notify();
}
} else {
myButton.setText("start");

}
}
});
}
return myButton;
}

public JLabel getMyLabel() {
if (this.myLabel == null) {
this.myLabel = new JLabel("0");
}
return myLabel;
}



public static void main(String[] s) {
new MyFrame();
}
}



/**
* Created by IntelliJ IDEA.
* User: Babak
* Date: 2/28/11
* Time: 10:27 PM
* To change this template use File | Settings | File Templates.
*/
public class MyTimer implements Runnable{

private MyFrame myFrame;
private int counter;

public MyTimer(MyFrame myFrame) {
this.myFrame = myFrame;
}

public void run() {
while(true) {
if (myFrame.getMyButton().getText().equals("stop")) {
this.myFrame.getMyLabel().setText(counter+"");
counter ++;
} else {
try {
synchronized (this) {
this.wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

ali zi zeperto
سه شنبه 10 اسفند 1389, 12:44 عصر
مشکل رفع شد.با متد setreadtimeout() کلاس URLConnection.این متد یه مقدار صحیح می گیره و برابرش به اندازه میلی ثانیه صبر می کنه.اگر چیزی برای خوندن از ورودی نبود کانکشن رو قطع می کنه.
2 روزه معطل این دستورم.به قول گفتنی "یار در خانه و ما گرد جهان می گردیم آنچه urlconnection داشت ز بیگانه تمنا می کردیم":تشویق: