를 할당 조합 사용. 이벤트 값은 EventPointer의 배열이며 이벤트 중 하나를 큐에서 제거하기 위해 X 시간마다 이동합니다. 그것은C -이이</p> <pre><code>typedef struct event_queue{ Event* event; int size; int front; int count; int delay; } event_queue; </code></pre> <p>이것은 기본적인 순환 큐처럼 보이는 C 구조를 갖는 메모리
p->event = calloc(p->size, sizeof(Event));
것처럼 초기화 것, 내가 유사한 이벤트하지만 약간 다른 데이터와 다른 유형을 큐에, 유사한 기능으로, 비슷한 큐를하고 싶어한다. 처음에는 별개의 대기열을 가지고 별도로 트래버스하려고했지만 기능이 너무 반복되어서 잘못 처리 한 것처럼 보입니다. "자매"대기열이 정확히 같지만 "이벤트"의 다른 유형에 대한 포인터가 있다고 가정하십시오.
대신이 조합을 사용해야합니까? 같은
typedef struct event_queue{
union{
Event* event;
VisualEvent* visual;
} data;
unsigned char* datatype; //array of same size as data for every individual member
int size;
int front;
int count;
int delay;
} event_queue;
그러나이 경우에
로, 어떻게 배열을위한 메모리를 할당 할 수 있습니까? 나는 그들을 분리시켜야 하는가? 이것은 나쁜 생각이다.enum EEventType { TypeOne, TypeTwo };
typedef struct EventTag_
{
EEventType tag;
} EventTag;
typedef struct EventOne_
{
EEventType tag;
// real data for this event type;
} EventOne;
typedef struct EventTwo_
{
EEventType tag;
// real data for the sister event type;
} EventTwo;
typedef union Event_
{
EventTag kind;
EventOne event1;
EventTwo event2;
} Event;
지금 Event
의 배열을 만들 :
오, 나는 심각하게 생각하지 않았습니다. 나는 그것을 지금 시도 할 것이다! –
죄송합니다, 나는 최종 조합에 약간 잘못이 있다고 생각합니다. 나는 이제 괜찮다고 생각한다. 대안으로, 당신은'Event'를'struct {EEventType tag; 노동 조합 {EventOne e1; EventTwo e2; }};' –