Я пишу программу для отправки импульсных выходов каждую секунду, согласно моим системным часам. Важно, чтобы это было так же точно, как я могу это сделать.Блокировать нить до тех пор, пока не будут внесены изменения в системные часы
Я использую XCode в качестве моего отладчика в настоящий момент, прежде чем я буду самостоятельно запускать его в другой системе.
Я использую отдельный pthread
, который отправляет результат через функцию (не написанную мной).
Я знаю о sleep(int seconds)
вызова, однако это не синхронизируется по часам, и я не слишком уверен в точности ...
Я искал вокруг для лучшего решения, но только попадались C's time.h
tm
struct. Есть ли способ заблокировать мой поток, пока второй на tm
изменениях или каких-либо других лучших решениях?
Вот моя функция для ссылки.
/*One PPS*/
void *_THD_One_PPS(void *args) {
/* Description: Send a 1 millisecond pulse every second */
selfargs_t *self = args;
pthread_detach(pthread_self());
double dutyCycle = 0.001;
long unsigned onTime = dutyCycle * 1000000000; // Time signal high, ns
while (self->myself->ThreadActiveStatus != THD_DONE) {
sleep(1); //TODO: Sync with clock as much as possible
printf("/\\ ");
setPinValue(BBB_GPIO_PIN_ONE_PPS, ON);
pauseNanoSec(onTime);
setPinValue(BBB_GPIO_PIN_ONE_PPS, OFF);
}
printf("Pulse Per Sec DIED");
_T_ThreadsDied++;
_T_ThreadsAlive--;
self->myself->ThreadActiveStatus = THD_DONE;
free(self->arguments);
free(self);
return NULL;
}
Есть ли простой или лучший способ сделать это?
Является ли это на самом деле, что соответствие сигналов, с системными часами важно, или было бы достаточно для того, * Интервал * между сигналами должен быть точным и последовательным? –
"однако это приводит к ошибке выполнения". Какая ошибка в точности? – kaylum
@JohnBollinger Я бы сказал, что последний, что бывший, но первый будет отличным дополнением, если это возможно * с * первым. –