Мне нужно измерить прошедшее время в нескольких местах моего приложения. Поэтому я ищу API, который даст мне доступ к монотонно увеличивающимся часам, на которые не влияют изменения системных часов или переход на летнее время (что-то вроде количества миллисекунд с момента загрузки).
Некоторый пример кода для проиллюстрируйте мою проблему:
var t1 = SomeClockFunction();
// bunch of code
// ...
var t2 = SomeClockFunction();
var elapsedTime = t2 - t1;
Я не могу просто использовать системные часы, так как это может привести к неправильным измерениям, если между t1 и t2 часы меняются пользователем или телефон переходит на летнее время / выходит из него.
Цель- Пользователи C имеют доступ к CACurrentMediaTime () или mach_absolute_time (). Какой' Я хочу, чтобы моя очередь могла содержать любой объект, поэтому я создал структуру QueueElement для хранения пустоты ...
Привет, ребята, я новичок в C, и для моего первого проекта мне нужно реализовать массив на основе очередь. Я хочу, чтобы моя очередь могла содержать любой объект, поэтому я создал структуру QueueElement для хранения пустого указателя на объект любого типа. Я думаю, что все работает, за исключением того, что я не могу прочитать поля «позиция» и «значение» из моей структуры QueueElement. Я получаю следующую ошибку при попытке компиляции.
Ошибка:
Runnable.c: In function `main':
Runnable.c:10: error: dereferencing pointer to incomplete type
Runnable.c:11: error: dereferencing pointer to incomplete type
Я почти уверен, что просто неправильно выполняю преобразование. Любая помощь приветствуется.
Еще раз спасибо, Pooch
Runnable.c
#include
#include "Queue.h"
int main(void) {
int i = 9;
Queue q = CreateQueue();
QueueElement e = CreateQueueElement(&i);
Enqueue(q, e);
QueueElement f = Dequeue(q);
/* PROBLEM IS HERE */
printf("position: %d", f->position);
printf("value: %d", (int *)(f->value));
DestroyQueue(q);
return 0;
}
Queue.h
#ifndef QUEUE_H
#define QUEUE_H
#include "QueueElement.h"
typedef struct QueueStruct *Queue;
Queue CreateQueue(void);
void DestroyQueue(Queue q);
void Enqueue(Queue q, QueueElement e);
QueueElement Dequeue(Queue q);
#endif
Queue.c
#include "QueueElement.h"
#include "Queue.h"
#define QUEUE_SIZE 10
struct QueueStruct {
QueueElement contents[QUEUE_SIZE];
int size;
};
Queue CreateQueue(void) {
Queue q = malloc(sizeof(struct QueueStruct));
q->size = 0;
return q;
}
void DestroyQueue(Queue q) {
int i;
for(i = 0; i < q->size; i++) {
free(q->contents[i]);
}
free(q);
}
void Enqueue(Queue q, QueueElement e) {
if (q->size < QUEUE_SIZE) {
q->contents[q->size++] = e;
}
}
QueueElement Dequeue(Queue q) {
if (q->size > 0) {
return q->contents[--q->size];
}
return;
}
QueueElement.h
#ifndef QUEUE_ELEMENT_H
#define QUEUE_ELEMENT_H
typedef struct QueueElementStruct *QueueElement;
QueueElement CreateQueueElement(void *v);
void DestroyQueueElement(QueueElement e);
int GetPosition(QueueElement e);
#endif
QueueElement.c
#include
#include "QueueElement.h"
struct QueueElementStruct {
int position;
void *value;
};
QueueElement CreateQueueElement(void *v) {
QueueElement e = malloc(sizeof(struct QueueElementStruct));
e->position = 0;
e->value = v;
return e;
}
void DestroyQueueElement(QueueElement e) {
free(e);
}
int GetPosition(QueueElement e) {
return e->position;
}