Как я могу заставить процедуру ждать, пока не будет выполнено определенное условие для продолжения работы с кодом? - PullRequest
0 голосов
/ 31 октября 2011

Я работаю над OPC Client. Этот клиент вызывает процедуру, которая, в свою очередь, вставляет несколько строк в одну таблицу «queue».

У этого клиента также есть другой поток, который время от времени открывает таблицу «очереди» и обновляет значения элементов OPC на основе элементов в таблице. После обновления каждого значения поток очищает строку из таблицы «очередь».

Что я хочу: я вызываю процедуру, она вставляет значения в очередь и ждет, пока другой поток не очистит введенные значения, чтобы сделать что-то еще.

Возможно ли это как-нибудь? В других языках я бы подумал об использовании чего-то вроде цикла while с Sleep () s, проверяя, очищены ли строки, до тех пор, пока он не выйдет из цикла.

Спасибо за любые идеи

-Edit:

Я попытаюсь уточнить еще немного:

Допустим, есть 3 разных типа работ: "ВСТАВИТЬ", "ОБНОВИТЬ" и "ЗАКЛЮЧИТЕЛЬНАЯ ОБРАБОТКА".

У меня может быть много разных заданий типа «ВСТАВКА», каждое из которых вставляется в очередь со своим уникальным идентификатором:

Insert (ID=1, OPCTag=1)
Insert (ID=1, OPCTag=2)
Insert (ID=1, OPCTag=3)

Insert (ID=2, OPCTag=1)
Insert (ID=2, OPCTag=2)
Insert (ID=2, OPCTag=3)

Существует только одно задание «ОБНОВИТЬ», постоянно читающее и очищающее очередь.

Я застрял в части "ФИНАЛЬНАЯ ОБРАБОТКА", так как у меня тоже будет несколько заданий этого типа, как и в случае "ВСТАВКИ".

Я не знаю, как вызвать правильное задание "ФИНАЛЬНАЯ ОБРАБОТКА", которое связано с "ИД ВСТАВКИ", после того как все строки с этим ИД ВСТАВКИ были очищены с помощью "ОБНОВЛЕНИЕ".

Скажите, что мое задание "ОБНОВЛЕНИЕ" очистило все строки с "ИД = 1". Когда очищается последняя строка с ID = 1, мне нужно запустить процедуру FinalProcessingID1. То же самое, когда ID = 2, все очищается.

...