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