скажем, у меня есть метод блокировки, давайте вызовем Block ().
поскольку я не хочу, чтобы мой основной поток блокировался, я мог бы создать рабочий поток, который вместо этого будет вызывать Блок.
однако у меня есть другое условие.
Я хочу, чтобы вызов block возвращался через 5 секунд, в противном случае я хочу, чтобы основной поток знал, что вызов Block завершился неудачей, и выйти из рабочего потока.
что было бы лучшим решением для этого сценария?
Я думал, что-то вроде этого:
создать рабочий поток, в рабочем потоке создать объект таймера с 5 секундами,
и в дополнение к вызову gettickcount до и после вызова Block и вычисления дельты.
Кроме того, я определю логическое указание IsReturned, возвращала ли функция Block уже.
после вызова блокировки, чтобы установить его истинным.
в соответствии с этим логическим значением в функции таймера, я решаю, как поступить:
если логическое значение истинно, я ничего не делаю.
если логическое значение равно false, я могу поставить APC OnFailure в очередь или, возможно, сообщить о событии Sucess в главном потоке и принудительно выйти из рабочего потока (дело в том, что я не уверен, что смогу это сделать)
Кроме того, после возврата из функции блокировки я проверяю, разрешена ли дельта через 5 секунд.
и поставить в очередь APC OnSucess. (вопрос в том, что выход из потока вызывающего абонента отменяет также таймер? потому что в основном после этого таймер бесполезен)
p.s - если я точно знаю, что могу отменить рабочий поток внутри функции таймера, я не думаю, что мне даже нужен материал gettickcount.
спасибо!