RiCGEN_BY_X()는 CGEN_BY_X()와 동일한 영향을 미칩니다. 글로벌 함수 내에서 이벤트를 보내는 데 이러한 명령문이 유용할 수 있습니다.
RiCGEN_BY_X()는 특정 오브젝트를 이벤트 송신자로 식별하므로 RiCReactive_genBySender() 프레임워크 루틴을 사용하여 이벤트를 보냅니다.
예를 들어, 이벤트 송신자를 Room[2]로 식별하는 동안 fault() 이벤트를 Furnace[1] 인스턴스에 보내려면 다음을 사용하십시오.
RiCGEN_BY_X(Furnace[1], fault(), Room[2], Room);
마지막 인수(이 경우, Room)는 송신자의 유형을 식별합니다.
IBM® Rational® Rhapsody®는 지원이 없으면 이유를 판별할 수 없으므로 메시지를 보내는 AOMAnimationItem을 알고 있는 특별한 경우에만 GEN_BY_X를 사용하십시오. 예를 들어, 일부 GUI 클래스(GUI1 및 GUI2)와 작업을 실행하는 일부 클래스(Huey 및 Louey)로 애플리케이션을 작성할 수 있습니다. 사용자가 Rational Rhapsody에 모든 클래스를 작성했으므로 애니메이션은 모든 네 개의 인스턴스를 표시합니다.
일부 GUI를 GUI1 및 GUI2 클래스와 연관시키십시오. GUI는 Rational Rhapsody 보다는 MFC 마법사를 사용하면 보다 손쉽게 작성되므로 마법사를 사용하십시오. GUI1 생성자는 몇 개의 단추가 있는 모델리스 대화 상자를 생성합니다.
이벤트를 생성하는 각 단추를 구성하십시오. 예를 들면, 다음과 같습니다.
void myDialog::OnButtonXPushed() {
myHuey->GEN(E);
}
애니메이션을 제외한 이 구성 작업은 이벤트 발생 위치를 모릅니다. 그 대신, 사용자는 이러한 방식으로 GEN_BY_GUI를 사용할 수 있습니다.
void myDialog::OnButtonXPushed() {
myHuey->GEN_BY_GUI
event E generated by GUI
myDialog 클래스에 속해 있는 GUI1 인스턴스를 지정하는 GUI1 *myOwner 메소드가 있는 경우, 다음을 작성할 수 있습니다.
void myDialog::OnButtonXPushed() {
myHuey->GEN_BY_X(E,myOwner);
}
이 경우, 애니메이션(출력 창, 이벤트 큐 및 시퀀스 다이어그램)은 올바른 GUI1 오브젝트에서 발생하는 것으로 E를 표시합니다. 이 방법은 GUI 및 해당 대화 상자가 아직 작성되지 않은 일부 실제 클래스를 작성하는 테스트 하니스인 경우에 특히 유용합니다.
#define RiCGEN_BY_X(INSTANCE,EVENT,SENDER,theClass) \
{ \
if ((INSTANCE) != NULL) { \
RiCReactive * reactive = &((INSTANCE)->ric_reactive);\
RiCEvent * event = &(RiC_Create_##EVENT->ric_event); \
RiCReactive_genBySender(reactive, event, \
aomX2Item(SENDER,aomc##theClass)); \
} \
}