コード例 #1
0
ファイル: TransferUnitSender.cs プロジェクト: pandyer/APIMon
        /// <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);
            }
        }
コード例 #2
0
        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();
            }
        }
コード例 #3
0
 public void receiveTransferUnits(Queue <TransferUnit> tu_array)
 {
     communication_point.receiveTransferUnits(tu_array);
 }