Exemplo n.º 1
0
        public bool Enqueue(ThreadCommand task, THREADED_ENQUEUE_TYPE enqueueType = THREADED_ENQUEUE_TYPE.CLEAR_AND_ADD)
        {
            if (task == null)
            {
                return false;
            }

            if (task != null)
            {
                lock (_queueSyncObject)
                {
                    switch (enqueueType)
                    {
                        case THREADED_ENQUEUE_TYPE.NORMAL:
                            _queue.Add(task);
                            task.State = COMMAND_STATE.STATE_WAIT;
                            break;
                        case THREADED_ENQUEUE_TYPE.CLEAR_AND_ADD:
                            for (int i = 0; i < _queue.Count; i++)
                            {
                                if (_queue[i].CommandID == task.CommandID)
                                {
                                    _queue[i].State = COMMAND_STATE.STATE_CANCEL;
                                    _queue.RemoveAt(i);
                                    i--;
                                }
                            }
                            _queue.Add(task);
                            task.State = COMMAND_STATE.STATE_WAIT;
                            break;
                        default:
                            break;
                    }

                    bool eventFlag = _existTaskEvent.WaitOne(0, false);

                    if ((eventFlag == false) && (_queue.Count > 0))
                    {
                        _existTaskEvent.Set();
                    }
                }
            }

            return true;
        }
Exemplo n.º 2
0
 public virtual ThreadCommand PreprocessEnqueuingTask(ThreadCommand task,out THREADED_ENQUEUE_TYPE enqueueType)
 {
     enqueueType = THREADED_ENQUEUE_TYPE.NORMAL;
     return task;
 }