Пример #1
0
        private void WriterTask_SampleClock(object sender, SampleClockEventArgs e)
        {
            try
            {
                if (IsWaitingForWriteStartEvent)
                {
                    IsWaitingForWriteStartEvent = false;
                    IsWriting = true;
                    CallStartScanEvent();
                    return;
                }

                if (!IsWriting)
                {
                    return;
                }

                if (!WriterTask.IsDone)
                {
                    ScanPosition = WriterTask.Stream.TotalSamplesGeneratedPerChannel;
                }

                if (ScanPosition >= TotalScanTicks)
                {
                    CallWriteScanEnd();
                }
            }
            catch (Exception ex)
            {
                LastError = ex;
            }
        }
        /// <summary>
        /// This event handler will be called when a task on this server receives a sample clock. 
        /// We only want to consume the first such event. It will be used to start and software timed
        /// operations on this server.
        /// 
        /// NOTE: This method never worked well, and is not no longer in use. Polling the buffer position with a monitoring
        /// thread ended up working much better. See softwareTaskTriggerPollingFunction()
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void triggerSoftwareTimedTasks(object sender, SampleClockEventArgs e)
        {
            messageLog(this, new MessageEvent("******** triggerSoftwareTimedTasks(...) was called. This function is no longer supported. How did you get here? ********"));
            displayError();
            /*
            lock (softTrigLock)
            {
                if (!softwareTimedTasksTriggered)
                {
                    lock (softwareTriggeringTaskLock)
                    {
                        // first order of business is to remove this event handler so it doesn't get overwhelmed
                        softwareTriggeringTask.SampleClock -= triggerSoftwareTimedTasks;
                    }

                    softwareTimedTasksTriggered = true;

                    //ok. Now trigger the tasks.
                    foreach (GpibTask gp in gpibTasks.Values)
                    {
                        gp.Start();
                    }
                    foreach (RS232Task rs in rs232Tasks.Values)
                    {
                        rs.Start();
                    }
                    foreach (RfsgTask rf in rfsgTasks.Values)
                    {
                        rf.Start();
                    }
                    messageLog(this, new MessageEvent("Software timed tasks triggered by " + serverSettings.DeviceToSyncSoftwareTimedTasksTo));
                }
                else
                {
                    softwareTimedTriggerCount++;
                    if (softwareTimedTriggerCount % 10 == 0)
                    {
                        messageLog(this, new MessageEvent("Ignored " + softwareTimedTriggerCount + " duplicate software-timed task triggers."));
                    }
                }
            }*/
        }