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.")); } } }*/ }