3.55 DM_QueueExtEvent

Die Ausführung einer dem externen Ereignis zugeordneten Regel wird durch die Anwendung über die Funktion DM_QueueExtEvent vorgemerkt. Vorgemerkt bedeutet, dass die Regel nicht sofort ausgeführt wird, sondern das externe Ereignis in eine Queue eingetragen wird und entsprechend den Mechanismen für Dialogereignisse weiterverarbeitet wird.

Dieses Ereignis wird dann vom IDM über die normale Ereignisverarbeitungslogik abgearbeitet und führt zur Bearbeitung einer Regel im Schema on <object> extevent <no.>.

DM_Boolean DML_default DM_EXPORT DM_QueueExtEvent
(
  DM_ID       objectID,
  DM_Int4     event_no,
  DM_UInt     argc,
  DM_Value   *argv,
  DM_Options  options
)

Parameter

-> DM_ID objectID

Dies ist der Identifikator des Objekts, an das dieses externe Ereignis geschickt werden soll.

-> DM_Int4 event_no

Dieser Parameter ist die Nummer des externen Ereignisses, das ausgelöst werden soll.

-> DM_Int argc

In diesem Parameter wird die Anzahl der Parameter (bis zu 16) übergeben.

-> DM_Value *argv

Mit Hilfe dieses Parameters werden die Argumente (bis zu 16) angegeben, die beim Regelaufruf vom IDM mit übergeben werden sollen. Dieser Vektor muss dabei die in dem Parameter argc angegebene Länge haben.

-> DM_Options options

Als Option können bei dieser Funktion folgende Werte angegeben werden:

Option

Bedeutung

DMF_DontTrace

Diese Option bedeutet, dass der Funktionsaufruf nicht mitprotokolliert werden soll, falls die Anwendung mit der Trace-Option gestartet worden ist.

DMF_Synchronous

Diese Option kann gesetzt werden, wenn sichergestellt ist, dass die Funktion DM_QueueExtEvent synchron zum Prozess aufgerufen wird. Dann kann die Funktion intern effizienter arbeiten. Synchron ist z.B. dann nicht der Fall, wenn aus einem Signal-Handler diese Funktion aufgerufen wird.

DMF_NoCriticalSection

Diese Option verhindert unter Microsoft Windows die Benutzung einer Critical Section.

Rückgabewert

DM_TRUE

Externes Ereignis konnte in die Queue gestellt werden.

DM_FALSE

Externes Ereignis konnte nicht in die Queue gestellt werden.

Anmerkung zu Microsoft Windows

Die Funktion DM_QueueExtEvent verwendet ab IDM-Version A.05.01.a eine Critical Section um sicherzustellen, dass sie vollständig abgearbeitet ist, bevor diese Funktion oder die Funktion DM_SendEvent das nächste Mal aufgerufen wird. Wird eine der beiden Funktionen in einer Situation aufgerufen, in der eine Critical Section nicht zulässig ist, dann kann die Verwendung der Critical Section durch die Option DMF_NoCriticalSection unterbunden werden.

Achtung

Ein Thread, der eine der beiden Funktionen ausführt darf nicht abgebrochen werden.

Beispiel

In einem Dialog soll auf ein Signal des Betriebssystems reagiert werden. Der Dialog sieht dann etwa wie folgt aus:

on dialog extevent 4711 (integer ErrCode)
{
  variable string S;
  S := "Dialog hat extevent " + itoa(ErrCode) + " erhalten";
  print S;
}

Das zugehörige C-Programm sieht etwa wie folgt aus:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <IDMuser.h>

DM_ID dialogID;

/* Diese Funktion wurde als Signal-Handler installiert */
void handler __1((int, sig))
{
  DM_Value data;
 
  data.type = DT_integer;
  data.value.integer = sig;
  DM_QueueExtEvent(dialogID, 4711, 1, &data, 0);
}

Siehe auch

C-Funktionen DM_SendEvent, DM_SendMethod

Kapitel „Externe Ereignisse“ und eingebaute Funktion sendevent() im Handbuch „Regelsprache“