/// <summary> /// Sends all remaining data /// </summary> /// <returns>true if some data were sent and false otherwise</returns> public bool flushBuffer() { Queue <TransferUnit> array_to_transfer = null; bool nothing_to_send = true; lock (transfer_units_queue) { if (transfer_units_queue.Count != 0) { array_to_transfer = new Queue <TransferUnit>(transfer_units_queue); transfer_units_queue.Clear(); nothing_to_send = false; } } if (nothing_to_send) { return(false); } else { remote_receiver.receiveTransferUnits(array_to_transfer); array_to_transfer.Clear(); array_to_transfer = null; return(true); } }
private void ThreadJob() { int cumulative_idle_time = 0; try { while (keep_running) { Queue <TransferUnit> transfer_untis = getBlockToSend(); if (transfer_untis != null) { remote_receiver.receiveTransferUnits(transfer_untis); transfer_untis.Clear(); transfer_untis = null; cumulative_idle_time = 0; if (random.Next(10000) < 10) { System.GC.Collect(); } } else { try { Thread.Sleep(buffer_send_period); cumulative_idle_time += buffer_send_period; } catch { } if (cumulative_idle_time > PING_PERIOD) { cumulative_idle_time = 0; remote_receiver.ping(); } if (random.Next(10000) < 5) { System.GC.Collect(); } } } } catch { Console.WriteLine("Error in processing thread"); } finally { setIsNotRunningAnymore(); } }
public void receiveTransferUnits(Queue <TransferUnit> tu_array) { communication_point.receiveTransferUnits(tu_array); }