Принудительно остановить выполнение функции в компоненте cf c - PullRequest
1 голос
/ 14 февраля 2020

Кто-нибудь знает, как я могу принудительно остановить выполнение функции в компоненте cf c, если она работает более определенного времени? Либо это может быть кусок кода, а не целая функция, т. Е. Если он завершился за 5 секунд, я выполняю некоторые действия, в противном случае другие.

1 Ответ

3 голосов
/ 14 февраля 2020

Единственный способ остановить произвольный фрагмент кода - запустить его в отдельном потоке, а затем завершить через заданный промежуток времени. Это можно сделать, вызвав отдельную страницу с установленным таймаутом запроса или используя cfthread.

Например, с thread ... (Обратите внимание .... как указал Алекс, вы можете использовать тайм-аут для cfthread)

<cfthread action="run" name="runForLimitedTime">
    ... code, call to function, etc ...
</cfthread>

<cfset sleep(5000) />

<cfif cfthread.runForLimitedTime.status eq "COMPLETED">
    <cfthread action="join" />
<cfelse>
    <cfthread action="terminate" name="runForLimitedTime" />
</cfif>

В качестве альтернативы с отдельной страницей ...

<!--- calling page --->

<cfset error = false />
<cftry>
    <cfhttp url="pageSetupForSpecificCall.cfm?timeout=5" throwonerror="true" />
    <cfcatch>
        <cfset error = true />
    </cfcatch>
</cftry>

<cfif error>
    something
<cfelse>
    something else
</cfif>


<!--- pageSetupForSpecificCall.cfm --->

<cfsetting requesttimeout="#url.timeout#" />

...do things...
...