void destroyKeyboardMonitorObject (KeyboardMonitorObject *kmo) { kmo->isActive = 0; while (getQueueSize(kmo->instanceQueue) > 0) { Element *element = getQueueHead(kmo->instanceQueue); KeyboardInstanceObject *kio = getElementItem(element); destroyKeyboardInstanceObject(kio); } if (kmo->instanceQueue) deallocateQueue(kmo->instanceQueue); if (kmo->kmx) destroyKeyboardMonitorExtension(kmo->kmx); free(kmo); }
void lQueueTestMain() { SqQueue<float> Q; initQueue(Q); for(int i=0;i<18;++i) enQueue(Q,3.14f*i); queueTraverse(Q); float a; for(int i=0;i<4;++i) deQueue(Q,a); queueTraverse(Q); cout<<queueLength(Q)<<endl; getQueueHead(Q,a); cout<<a<<endl; clearQueue(Q); destroyQueue(Q); int aa=100; }
static int invokeMonitorCallback (OperationEntry *operation) { MonitorExtension *extension = operation->extension; AsyncMonitorCallback *callback = extension->callback; logOperation(operation, callback); if (callback) { const AsyncMonitorCallbackParameters parameters = { .error = operation->error, .data = operation->data }; if (callback(¶meters)) return 1; } return 0; } static int invokeInputCallback (OperationEntry *operation) { TransferExtension *extension = operation->extension; AsyncInputCallback *callback = extension->direction.input.callback; size_t count; logOperation(operation, callback); if (!callback) return 0; { const AsyncInputCallbackParameters parameters = { .data = operation->data, .buffer = extension->buffer, .size = extension->size, .length = extension->length, .error = operation->error, .end = extension->direction.input.end }; count = callback(¶meters); } if (operation->error) return 0; if (extension->direction.input.end) return 0; operation->finished = 0; if (count) { memmove(extension->buffer, &extension->buffer[count], extension->length -= count); if (extension->length > 0) operation->finished = 1; } return 1; } static int invokeOutputCallback (OperationEntry *operation) { TransferExtension *extension = operation->extension; AsyncOutputCallback *callback = extension->direction.output.callback; logOperation(operation, callback); if (!operation->error && (extension->length < extension->size)) { operation->finished = 0; return 1; } if (callback) { const AsyncOutputCallbackParameters parameters = { .data = operation->data, .buffer = extension->buffer, .size = extension->size, .error = operation->error }; callback(¶meters); } return 0; } static Element * getActiveOperationElement (const FunctionEntry *function) { Queue *queue = function->operations; if (function->methods->invokeCallback == invokeMonitorCallback) return getStackHead(queue); return getQueueHead(queue); }