Решил создать вот такую тему по Occurrences. Эта информация может пригодиться для выполнения синхронизации собственной библиотеки с LabVIEW. В настоящее время предлагает крайне скудный функционал для синхронизации. Это пара функций: Occur и PostLVUserEvent. На самом деле в этих функций больше. Привожу здесь их прототипы и краткое описание работы.
Основные функции:
1. Occurrence AllocOccur(void);
Генерирует новый Occurrence. Это фактически аналог Generate Occurrence (палитра Synchronization -> Occurrences). Однако, в отличие от указанного , функция при каждом вызове создаёт новый уникальный Occurrence. Generate Occurrence не всегда возвращает уникальный Occurrence, а только когда ранее сгенерированный Occurrence был уничтожен.
2. MgErr DeallocOccur(Occurrence o);
Уничтожает заданный Occurrence.
3. uInt32 AllocOccurHdlr(Occurrence o, void *Callback_Func, void *User_Param_Ptr)
Создаёт новый обработчик для указанного Occurrence и привязывает к обработчику пользовательскую функцию. Данная функция будет вызываться при срабатывании Occurrence. Прототип у функции следующий: void Callback_Func(void *User_Param_Ptr);. User_Param_Ptr - это пользовательский параметр, который передаётся в callback-функцию. Может быть указателем на структуру с данными.
4. MgErr DeallocOccurHdlr(uInt32 Handler);
Уничтожает заданный обработчик Occurrence.
5. MgErr OnOccurrence(uInt32 Handler, uInt8 / LVBoolean IgnorePrevious);
Активирует ожидание срабатывания заданного обработчика Occurrence. Это неполный аналог Wait On Occurrence. Только в данном случае ожидание выполняется не в пользовательском коде, а при помощи внутреннего механизма . При активированном ожидании и срабатывании Occurrence вызывается пользовательская функция Callback_Func. Без вызова OnOccurrence пользовательская функция не вызовется.
6. MgErr CancelOnOccur(uInt32 Handler);
Отменяет ожидание срабатывания Occurrence, активированное ранее с помощью OnOccurrence или OnOccurrenceWithTimeout.
7. MgErr OnOccurrenceWithTimeout(uInt32 Handler, uInt8 / LVBoolean IgnorePrevious, int32 to);
Активирует ожидание срабатывания заданного обработчика Occurrence. По сути полный аналог Wait On Occurrence. Таймаут ожидания задаётся в миллисекундах. Может быть равен -1, что означает бесконечное ожидание. При наступлении таймаута, также как и при срабатывании Occurrence, вызывается пользовательская функция Callback_Func.
8. uInt8 / LVBoolean HandlerTimedOut(uInt32 Handler);
Возвращает True, если произошёл таймаут при ожидании Occurrence, активированном ранее с помощью OnOccurrenceWithTimeout.
9. MgErr Occur(Occurrence o);
Стандартная функция LabVIEW, аналог Set Occurrence. Приводит к срабатыванию заданного Occurrence. При срабатывании вызывается пользовательская функция Callback_Func.
10. MgErr OccurAtTime(Occurrence o, uInt32 t);
Приводит к срабатыванию заданного Occurrence в указанное время t. Время задаётся в "тиках" системного таймера (мс). Новый вызов функции переписывает ранее заданное время. Отменить срабатывание Occurrence можно с помощью уничтожения этого Occurrence, либо функцией CancelOccurAtTime (см. описание!).
11. MgErr CancelOccurAtTime(Occurrence o);
Отменяет срабатывание Occurrence по таймеру, активированное ранее с помощью OccurAtTime. Функция присутствует только в mgcore_SH_*_0.dll, в самом её нет. Это означает, что в RTE этой функции также не будет, потому лучше пользоваться этой функцией исключительно для отладки. А ещё лучше вообще её не использовать.
12. void OccurIfValid(Occurrence o);
Приводит к срабатыванию заданного Occurrence, если он действителен (является Magic Cookie), т.е. не был уничтожен ранее с помощью DeallocOccur.
13. MgErr FireOccurHdlr(uInt32 Handler);
Аналог Occur, но не приводит к срабатыванию Occurrence, если функция вызвана до активации ожидания срабатывания этого Occurrence (т.е. эффект такой же, как при параметре IgnorePrevious = True для OnOccurrence / OnOccurrenceWithTimeout). После вызова функции устанавливается флаг таймаута (HandlerTimedOut возвращает True).
Прочие функции (практически бесполезные):
1. MgErr BindOccurHdlr(uInt32 NewCookie, Occurrence o, void *Callback_Func, void *User_Param_Ptr);
Привязывает к обработчику Occurrence пользовательскую функцию Callback_Func. Вызывается внутри AllocOccurHdlr. Также требует в качестве входного параметра объект Magic Cookie, который становится обработчиком Occurrence.
2. uInt32 AllocOccurHdlrStrict(Occurrence o, void *Callback_Func, void *User_Param_Ptr);
Полный аналог AllocOccurHdlr, за тем исключением, что для флага таймаута используется другое базовое значение во внутренней структуре LabVIEW. Для стандартного обработчика могут быть установлены такие флаги:
0 - таймаута нет
1 - активировано ожидание с помощью OnOccurrenceWithTimeout
2 - таймаут
Для обработчика, созданного с помощью AllocOccurHdlrStrict, флаги становятся такими:
4 - таймаута нет
5 - активировано ожидание с помощью OnOccurrenceWithTimeout
6 - таймаут
3. MgErr OnOccurrenceWithTimeoutForExec(uInt32 Handler, uInt8 / LVBoolean IgnorePrevious, int32 to, void *QEtopElement);
Полный аналог OnOccurrenceWithTimeout. По-видимому, имеет смысл только в контексте LV Execution System. Назначение последнего параметра не понятно.
4. MgErr OnOccurrenceAndOccurAtTimeForExec(uInt32 Handler, uInt8 / LVBoolean IgnorePrevious, Occurrence o, uInt32 t, void *QEtopElement);
Полный аналог связки OnOccurrence + OccurAtTime. По-видимому, имеет смысл только в контексте LV Execution System. Назначение последнего параметра не понятно.
5. uInt32 AllocThreadSafeOccurHdlr(Occurrence o, void *Callback_Func, void *User_Param_Ptr);
Полный аналог AllocOccurHdlr, но, судя по имени, генерирует потокобезопасный обработчик. В чём именно потокобезопасность заключается, не понятно. Присутствует только в mgcore_SH_*_0.dll.
6. Остальные внутренние функции из mgcore_SH_*_0.dll (без разбора):
ValidOccurrence
LVBoolean ChkOccurrences(void);
ChkThGroupOccurrences
GetOccurrenceManagerMainThreadGroupIndex
OccurrenceManagerService
GetOccurrenceManagerAsyncArea
SetOccurrenceManagerMainThreadGroupIndex
Проверить работу основных функций по работе с Occurrence можно даже с БД в . Для этого я сделал вот такой пример:
При инициализации программы в качестве обработчика Occurrence регистрируется пользовательская функция OC_Callback (см. исходник OCTest.dll). Эта функция вызывается при каждом срабатывании Occurrence. Кроме того, функция генерирует случайное целое число и отправляет его в с помощью PostLVUserEvent (в виде строки). Это число также записывается по указателю UserParam. В выводится и полученная строка с числом, и содержимое указателя UserParam, чтобы можно было сравнить оба числа и убедиться, что они одинаковы.
Occurrences: недокументированные возможности
ActiveX, .NET, DLL
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 3 Ответы
- 790 Просмотры
-
Последнее сообщение Artem.spb
Вернуться в «Коммуникация с приложениями»
Перейти
- Форум инженеров
- ↳ Русский
- ↳ Магазин
- ↳ Готовые комплексы сбора данных
- ↳ CompactRIO
- ↳ Контроллеры cRIO
- ↳ Модули cRIO
- ↳ Шасси cRIO
- ↳ Главный форум
- ↳ Новости
- ↳ Для чайников
- ↳ Общие
- ↳ Железо
- ↳ Софт
- ↳ Наука
- ↳ Коммуникация с приборами
- ↳ Обработка сигнала
- ↳ Лицевая панель
- ↳ Сохранение данных
- ↳ Работа с графикой и звуком
- ↳ Модели программирования
- ↳ Создание приложений
- ↳ Среды разработки
- ↳ Коммуникация с приложениями
- ↳ Проекты
- ↳ Actor Framework
- ↳ Пакеты программ для инженеров и их расширения
- ↳ Расширения NI LabVIEW
- ↳ LIFA
- ↳ Report Generation / Diadem
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ PDA / Palm / Touch Panel
- ↳ Modulation
- ↳ Motion / PID
- ↳ Statechart
- ↳ GPU Analysis Toolkit
- ↳ NI Requirements Gateway
- ↳ TestStand
- ↳ Языки программирования
- ↳ Robotics
- ↳ Multisim
- ↳ Прочее
- ↳ Конкурсы
- ↳ Библиотека инженера
- ↳ Курсы и сертификация
- ↳ Объявления
- ↳ Поздравления
- ↳ Обо всём на свете
- ↳ Olympiad 2020 / Олимпиада 2020
- ↳ Вебсайт и форум
- ↳ Анонсы
- ↳ Отклики
- ↳ Предложения
- ↳ Интервью с форумчанами
- ↳ Партнёрские организации и дочерние проекты
- ↳ Developlabs
- ↳ ЭПИ МИСиС
- ↳ Проекты
- ↳ ООО "ПромТех"
- ↳ Продукция
- ↳ ООО "Прикладная кибернетика"
- ↳ ТехноАрт
- ↳ WorldSkills Russia
- ↳ Грузинский Технический Университет - სტუ - საქართველოს ტექნიკური უნივერსიტეტი
- ↳ Deutsch
- ↳ LabVIEW
- ↳ News
- ↳ Für Anfänger
- ↳ Allgemein
- ↳ Kommunikation mit Geräten
- ↳ Signalverarbeitung
- ↳ Front panel
- ↳ Datenspeicherung
- ↳ Arbeiten mit Grafik und Sound
- ↳ Programmiermuster
- ↳ Application Builder
- ↳ Entwicklungsumgebung
- ↳ Kommunikation mit Applikationen
- ↳ Projekte
- ↳ Module / Toolkits
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ PDA / Palm / Touch Panel
- ↳ Modulation
- ↳ Motion / PID
- ↳ TestStand
- ↳ Statechart
- ↳ Report Generation / Diadem
- ↳ Sonstiges
- ↳ Wettbewerbe
- ↳ LabVIEW Bücher
- ↳ Kurse und Zertifikation
- ↳ Programmiersprachen
- ↳ Software
- ↳ Hardware
- ↳ Arbeitsmarkt
- ↳ Marktplatz
- ↳ Über alles mögliche
- ↳ Webseite und Forum
- ↳ Ankündigungen
- ↳ Rückmeldungen
- ↳ Vorschläge
- ↳ English
- ↳ LabVIEW
- ↳ News
- ↳ For beginners
- ↳ General
- ↳ Communcation with devices
- ↳ Signal processing
- ↳ Front panel
- ↳ Data storage
- ↳ Working with graphic and sound
- ↳ Design patterns
- ↳ Application builder
- ↳ Development environment
- ↳ Communication with applications
- ↳ Projects
- ↳ Moduls / Toolkits
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ PDA / Palm / Touch Panel
- ↳ Modulation
- ↳ Motion / PID
- ↳ TestStand
- ↳ Statechart
- ↳ Report Generation / Diadem
- ↳ Miscellaneous
- ↳ Contests
- ↳ LabVIEW books
- ↳ Training and certification
- ↳ Programming languages
- ↳ Software
- ↳ Hardware
- ↳ Employment
- ↳ Market
- ↳ Offtopic
- ↳ Website and forum
- ↳ Announcements
- ↳ Feedback
- ↳ Suggestions
- ↳ Український
- ↳ LabVIEW
- ↳ Новини
- ↳ Для чайників
- ↳ Загальний
- ↳ Комунікація з пристроями
- ↳ Обробка сигналу
- ↳ Лицьова панель
- ↳ Збереження даних
- ↳ Робота з графікою і звуком
- ↳ Моделі програмування
- ↳ Створення додатків
- ↳ Середовище розробки
- ↳ Комунікація з додатками
- ↳ Проекти
- ↳ Модулі / Тулкіти
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ PDA / Palm / Touch Panel
- ↳ Modulation
- ↳ Motion / PID
- ↳ TestStand
- ↳ Statechart
- ↳ Report Generation / Diadem
- ↳ NI Requirements Gateway
- ↳ Інше
- ↳ Конкурси
- ↳ Книги по LabVIEW
- ↳ Курси і сертифікація
- ↳ Мови програмування
- ↳ Софт
- ↳ Хард
- ↳ Біржа праці
- ↳ Оголошення
- ↳ Балачка
- ↳ Вебсайт і форум
- ↳ Анонси
- ↳ Відгуки
- ↳ Пропозиції
- ↳ Italiano
- ↳ LabVIEW
- ↳ News
- ↳ Per principianti
- ↳ Generale
- ↳ Comunicazione con dispositivi
- ↳ Gestione dei segnali
- ↳ Panello frontale
- ↳ Salvataggio dati
- ↳ Lavorare con grafica
- ↳ Modelli di programmazione
- ↳ Application Builder
- ↳ Ambiente di sviluppo
- ↳ Comunicazione con applicazioni
- ↳ Progetti
- ↳ Moduli / Toolkits
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ PDA / Palm / Touch Panel
- ↳ Modulation
- ↳ Motion / PID
- ↳ TestStand
- ↳ Statechart
- ↳ Report Generation / Diadem
- ↳ Altro
- ↳ Concorsi
- ↳ Libri LabVIEW
- ↳ Corsi e certificazione
- ↳ Linguaggi di programmazione
- ↳ Software
- ↳ Hardware
- ↳ Mercato di lavoro
- ↳ Piazza di mercato
- ↳ Un po di tutto
- ↳ Pagina web e forum
- ↳ Annunci
- ↳ Feedback
- ↳ Proposte
- ↳ العربية
- ↳ لاب فيو
- ↳ آخر خبرية
- ↳ ساحة المبتدئين
- ↳ ساحة لاب فيو العامة
- ↳ الإتصال بالمعدات
- ↳ معالجة الإشارة
- ↳ الواجهة الأمامية / Frontpanel
- ↳ تخزين البيانات
- ↳ جرافيك
- ↳ نسوق برمجة
- ↳ إنشاء التطبيقات
- ↳ تطوير بيئة لاب فيو
- ↳ الإتصال بالتطبيقات
- ↳ مشاريعك
- ↳ وحدات برمجة / أدوات برمجة
- ↳ مرئيات / IMAQ
- ↳ تقارير لحظية / FPGA / Embedded
- ↳ لاب ويندوز /CVI/ ستوديو القياس
- ↳ المساعد الشخصي / بالم / شاشات اللمس
- ↳ تعديل الإشارة
- ↳ حركة / تضميم
- ↳ حقل التجارب
- ↳ Statechart وحدة
- ↳ تنفيذ التقارير / دياديم
- ↳ متفرقات
- ↳ مسابقات
- ↳ مكتبة لاب فيو
- ↳ التدريب و الشهادات
- ↳ لغات برمجة
- ↳ برمجيات
- ↳ هاردوير
- ↳ فرص عمل
- ↳ مبيع و شراء
- ↳ ساحة المواضيع الأخرى
- ↳ حول الموقع و المنتدى
- ↳ تبليغات إدارية
- ↳ ملاحظات
- ↳ إقتراحات
- ↳ القسم الإداري
- ↳ Қазақша
- ↳ LabVIEW
- ↳ Жаңалықтар
- ↳ Шәйнектер үшін
- ↳ Жалпы
- ↳ Саймандар
- ↳ Бағдарлама
- ↳ Ғылым
- ↳ Аспаптармен байланыстыру
- ↳ Дабылды өңдеу
- ↳ Бет панелі
- ↳ Мәліметтерді сақтау
- ↳ Графика және дыбыспен жұмыс жасау
- ↳ Бағдарлама нұсқалары
- ↳ Қосымшаларды жасау
- ↳ Жасау ортасы
- ↳ Қосымшалармен байланыстыру
- ↳ Жобалар
- ↳ עִבְרִית
- ↳ LabVIEW
- ↳ LabView חדשות לגבי
- ↳ למתחילים
- ↳ כללי
- ↳ תקשרת עם מכשירים
- ↳ עיבוד אותות
- ↳ לוח קדמי
- ↳ אחסון מידע
- ↳ עבודה עם גרפים
- ↳ עיצוב דוגמאות
- ↳ בניית תוכנה
- ↳ סביבה מפותחת
- ↳ תקשרת ותוכנות
- ↳ פרויקטים
- ↳ Toolkits
- ↳ Vision / IMAQ
- ↳ Հայերեն
- ↳ LabVIEW
- ↳ Նորություններ
- ↳ Սկսնակների համար
- ↳ Ընդհանուր
- ↳ Հաղորդակցում սարքերի միջոցով
- ↳ Ազդանշանի վերլուծություն
- ↳ Արտաքին վահանակ
- ↳ Տվյալների պահպանում
- ↳ Աշխատանք գրաֆիկայի և ձայնի միջոցով
- ↳ Ծրագրավորման մոդելներ
- ↳ Ծրագրերի ստեղծում
- ↳ Զարգացման միջավայր
- ↳ Հաղորդակցում ծրագրերի միջոցով
- ↳ Նախագծեր
- ↳ Մոդուլներ / Գործիքներ
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ PDA / Palm / Touch Panel
- ↳ Modulation
- ↳ Motion / PID
- ↳ TestStand
- ↳ Statechart
- ↳ Report Generation / Diadem
- ↳ LEGO Mindstorms
- ↳ Multisim
- ↳ Այլ
- ↳ Մրցույթներ
- ↳ LabVIEW-ի վերաբերյալ գրքեր
- ↳ Դասընթացներ և Հավաստագրում
- ↳ Ծրագրավորման լեզուներ
- ↳ Ծրագրեր
- ↳ Սարքավորումներ
- ↳ Թափուր աշխատատեղեր
- ↳ Հայտարարություններ
- ↳ Աշխարհում ամեն ինչի մասին
- ↳ Վեբկայք և ֆորում
- ↳ Տեղեկատու
- ↳ Հետադարձ կապ
- ↳ Առաջարկներ
- ↳ Մոդերատորի բաժին
- ↳ Խմբեր
- ↳ Freelance
- ↳ Ուսանողներ
- ↳ Դասավանդողներ
- ↳ Բլոգերներ
- ↳ Polski
- ↳ LabVIEW
- ↳ Aktualności
- ↳ Dla początkujących
- ↳ Ogólne
- ↳ Komunikacja z urządzeniami
- ↳ Przetwórstwo sygnału
- ↳ Panel czołowy (Front Panel)
- ↳ Zapisywanie danych
- ↳ Praca z grafiką i dźwiękiem
- ↳ środowisko programistyczne
- ↳ połączenie z aplikacjami
- ↳ Projekty
- ↳ Moduły/narzędzia
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ Modulation
- ↳ Multisim
- ↳ Inne
- ↳ Konkursy
- ↳ Podręczniki po LabVIEW
- ↳ Kursy i certyfikacja
- ↳ Giełda pracy
- ↳ Ogłoszenia
- ↳ O wszystkim
- ↳ Strona internetowa i forum
- ↳ Anonsy
- ↳ Propozycje
- ↳ 中文
- ↳ LabVIEW/虚拟仪器
- ↳ 新闻
- ↳ 新手入门
- ↳ 概述
- ↳ 设备控制与数据交换
- ↳ 信号处理
- ↳ 前面板
- ↳ 数据存储
- ↳ 图象处理
- ↳ 设计模式
- ↳ 应用程序生成器
- ↳ 开发环境
- ↳ 应用程序的沟通
- ↳ 工程项目
- ↳ 模块 / 工具包
- ↳ 视觉 / IMAQ
- ↳ 实时/ FPGA / 嵌入式系统
- ↳ LabWindows / CVI / 测量工作室
- ↳ PDA / Palm / 触摸屏
- ↳ 调制
- ↳ 方案 / PID
- ↳ 测试状态
- ↳ 状态
- ↳ 报告生成 / Diadem
- ↳ 其他
- ↳ 竞赛
- ↳ LabVIEW 书籍
- ↳ 培训和认证
- ↳ 编程语言
- ↳ 软件
- ↳ 硬件
- ↳ 求职信息
- ↳ 市场信息
- ↳ 无所不能
- ↳ 站点论坛
- ↳ 公告
- ↳ 反馈
- ↳ 意见建议
- ↳ 版主交流
- ↳ Eesti
- ↳ LabVIEW
- ↳ Uudised
- ↳ Võhikutele
- ↳ Üldine
- ↳ Seadmete kommunikatsioon
- ↳ Signaalitöötlus
- ↳ Esipaneel
- ↳ Andmete salvestamine
- ↳ Graafikaga ja heliga töötamine
- ↳ Programmeerimise mudelid
- ↳ Rakenduste loomine
- ↳ Arengukeskkond
- ↳ Kommunikatsioon tarkvaraga
- ↳ Projektid
- ↳ Moodulid/toolkitid
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ Modulation
- ↳ LEGO Mindstorms
- ↳ Multisim
- ↳ NI WSN
- ↳ LIFA
- ↳ Muu
- ↳ Konkursid
- ↳ LabVIEW raamatud
- ↳ Kursused ja sertifikaadid
- ↳ Programmeerimiskeeled
- ↳ Tarkvara
- ↳ Riistvara
- ↳ Teadus
- ↳ Tööbörs
- ↳ Kuulutused
- ↳ Õnnitlused
- ↳ Räägime kõigest
- ↳ Veebisait ja foorum
- ↳ Teated
- ↳ Tagasisede
- ↳ Pakkumised
- ↳ Intervjuu foorumi kasutajatega
- ↳ Français
- ↳ LabVIEW
- ↳ News
- ↳ Pour les débutants
- ↳ Courant
- ↳ La communication avec des périphériques
- ↳ Traitement du signal
- ↳ Front panel
- ↳ Stokage de données
- ↳ Travailler avec des graphiques
- ↳ Modelè de programmation
- ↳ Application Builder
- ↳ Environnement de développement
- ↳ Communication avec les applications
- ↳ Projets
- ↳ Modules/ boîtes à outils
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ PDA / Palm / Touch Panel
- ↳ Modulation
- ↳ Motion / PID
- ↳ TestStand
- ↳ Statechart
- ↳ Report Generation / Diadem
- ↳ D'autres choses
- ↳ Concourses
- ↳ Livres de LabVIEW
- ↳ Cours et la certification
- ↳ Langues de programmation
- ↳ Software
- ↳ Hardware
- ↳ Marché du travail
- ↳ Place de marchè
- ↳ Sur d'autres choses
- ↳ Web site et forum
- ↳ Annonces
- ↳ Retour
- ↳ Propositions
- ↳ Olympiads / Олимпиады
- ↳ Olympiad 2020
- ↳ Olympiad 2021