better orderbook synchronozation

This commit is contained in:
7u83 2017-04-08 01:35:13 +02:00
parent 35e2160635
commit b22582399f

View File

@ -31,6 +31,7 @@ import gui.tools.NummericCellRenderer;
import java.awt.Component; import java.awt.Component;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.concurrent.atomic.AtomicBoolean;
import javax.swing.JTable; import javax.swing.JTable;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableCellRenderer;
@ -121,7 +122,7 @@ public class OrderBook extends javax.swing.JPanel implements Exchange.BookReceiv
model = (DefaultTableModel) this.list.getModel(); model = (DefaultTableModel) this.list.getModel();
trader_column = list.getColumnModel().getColumn(0); trader_column = list.getColumnModel().getColumn(0);
list.getColumnModel().getColumn(1).setCellRenderer(new NummericCellRenderer(3)); list.getColumnModel().getColumn(1).setCellRenderer(new NummericCellRenderer(3));
list.getColumnModel().getColumn(2).setCellRenderer(new NummericCellRenderer(0)); list.getColumnModel().getColumn(2).setCellRenderer(new NummericCellRenderer(0));
cfgChanged(); cfgChanged();
// Globals.se.addBookReceiver(Exchange.OrderType.BUYLIMIT, this); // Globals.se.addBookReceiver(Exchange.OrderType.BUYLIMIT, this);
Globals.addCfgListener(this); Globals.addCfgListener(this);
@ -130,6 +131,8 @@ public class OrderBook extends javax.swing.JPanel implements Exchange.BookReceiv
boolean oupdate = false; boolean oupdate = false;
boolean new_oupdate = false; boolean new_oupdate = false;
long ouctr = 0;
void oupdater() { void oupdater() {
ArrayList<Order> ob = Globals.se.getOrderBook(type, depth); ArrayList<Order> ob = Globals.se.getOrderBook(type, depth);
model.setRowCount(ob.size()); model.setRowCount(ob.size());
@ -141,24 +144,33 @@ public class OrderBook extends javax.swing.JPanel implements Exchange.BookReceiv
row++; row++;
} }
oupdate = false; synchronized (this) {
oupdate = new_oupdate;
new_oupdate = false;
}
if (oupdate) {
SwingUtilities.invokeLater(() -> {
oupdater();
});
}
} }
@Override @Override
public synchronized void UpdateOrderBook() { public void UpdateOrderBook() {
if (oupdate) { synchronized (this) {
new_oupdate=true; if (oupdate) {
return; new_oupdate = true;
return;
}
oupdate = true;
} }
oupdate = true;
SwingUtilities.invokeLater(() -> { SwingUtilities.invokeLater(() -> {
oupdater(); oupdater();
}); });
} }