오브젝트가 기본 유형 필드 및 기본 유형 필드가있는 기타 구조체 만 포함하는 경우에만 .... 포인터를 보내면 포인터가 다른 프로세스 또는 다른 시스템에있는 경우 다른 쪽에서 재사용 할 수 없습니다.
또한 상속 및 가상 메소드가있는 클래스를 사용하면 엉망이 될 수 있습니다!
내 관점에서 일종의 Serialize 메서드를 추가하는 것이 좋습니다.
또한이 방식으로 직렬화 된 struct binary를 전달하는 것은 이식성이 전혀 없으며 다른 시스템과 동일한 메커니즘을 사용하거나 구조체 또는 객체 패킹과 같은 것을 변경하려는 경우 몇 가지 문제가 발생할 수 있습니다 .
사용자 지정 serialization 및 deserialization이 선호되고 더 많은 이식성이 있지만 선택은 물론입니다.
뭔가 같은 ...
template<typename T>
int SerializeAndSendObject(mqd_t mqdes, const T* instance)
{
MySerializationStream stream;
instance->SerializeTo(stream);
mq_send(stream.toBuffer(), stream.size());
}
당신은 단지 두 개의 스레드 사이에 보내는 대신 내가 새로 할당 된 객체에 불과 포인터를 보낼 것입니다 그리고 난에서 할당을 해제 할 객체의 컨텐츠를 전송하는 경우 반대편. 대기열을 처리 할 때 먼저 대기중인 모든 객체를 파괴해야합니다.
Object* pointer = &obj;
mq_send(mqdes, static_cast<char*>(pointer), sizeof(Object*), 1);
참고 sizeof (Object *) ... 포인터 만 보내야하며 개체 자체는 보내지 않아야합니다.
메시지 큐가 스레드 사이에도 있더라도? –
만약 당신이 대신 객체의 내용을 보내는 대신 두 개의 스레드 사이에 보내는 단지 새 개체와 할당 된 포인터를 보내겠다 나는 다른 측면에서 할당을 해제합니다. 대기열을 처리 할 때 먼저 대기중인 모든 객체를 삭제해야합니다. –
내가 가진 문제는 이벤트를 대기열에 넣어야한다는 것입니다. 이러한 메시지는 mqueue를 통해 전송됩니다. –