{"id":938,"date":"2023-08-17T09:42:37","date_gmt":"2023-08-17T00:42:37","guid":{"rendered":"http:\/\/www.charleskwon.com\/?p=938"},"modified":"2023-08-18T12:02:39","modified_gmt":"2023-08-18T03:02:39","slug":"why-need-delay-option-of-tawaitweb-prg","status":"publish","type":"post","link":"https:\/\/www.charleskwon.com\/?p=938","title":{"rendered":"Why need delay\/timeout option of TAWaitWeb.prg"},"content":{"rendered":"\n<p><a href=\"https:\/\/forums.fivetechsupport.com\/posting.php?mode=reply&amp;f=3&amp;t=43596&amp;sid=598f688d2d948670a0840378c26fd757\"><\/a><\/p>\n\n\n\n<p class=\"has-drop-cap\">In the TAWaitWeb class, the argument named &#8216;nSecond&#8217; is present.<\/p>\n\n\n\n<p>Upon closer examination, this argument is not for sleep; instead, it is used to set a waiting time within a while loop to check for changes in the value being passed asynchronously.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\"><em>Manners<\/em>&nbsp;maketh&nbsp;<em>man<\/em><\/h2>\n\n\n\n<div style=\"height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>There is a bold individual who cannot even analyze source code. This person, hiding behind anonymity, asked where the nSecond option is being used and also employed incorrect expressions. However, I do not engage in battles with fools.<br><br>So, in summary, <code><strong>nSecond<\/strong><\/code> in this code functions as a timeout value. The method<strong> <code>Query<\/code><\/strong> keeps checking for a response in a loop, but it won&#8217;t do this indefinitely \u2013 it will stop and exit the loop if<strong> <code>nSecond<\/code><\/strong> milliseconds have passed without a response. This is a common pattern used to prevent a program from waiting forever in situations where a response might never come, thus avoiding potential hangs or freezes in the application.<br><br>Alright, I will show you the relevant code again. Please read it over to understand why the nSecond parameter is necessary&#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">Code for the wise person.<\/h2>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:15.40625px;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"METHOD\u00a0Query(\u00a0cQuery, nSecond, cReturn\u00a0)\u00a0CLASS\u00a0TAWaitWeb\n\u00a0 \u00a0\u00a0LOCAL\u00a0nCounter :=\u00a00\n\u00a0 \u00a0\u00a0LOCAL\u00a0lReturn \u00a0:= .f.\n\u00a0 \u00a0\u00a0LOCAL\u00a0cEval \u00a0 \u00a0:=\u00a0&quot;SendToFWH($QUERY$, 'WebFunc')&quot;\n\u00a0 \u00a0\u00a0LOCAL\u00a0nStartSec := GetTickCount()\n\n\u00a0 \u00a0\u00a0DEFAULT\u00a0nSecond :=\u00a0500\n\n\u00a0 \u00a0 ::bOldBind\u00a0:= ::oWeb:bOnBind\n\u00a0 \u00a0 ::oWeb:bOnBind\u00a0:=\u00a0{\u00a0| cJson, cCalls, ... | ::GetBind(\u00a0cJson, cCalls, ...\u00a0)\u00a0}\n\n\u00a0 \u00a0 cEval := STRTRAN(\u00a0cEval,\u00a0&quot;$QUERY$&quot;, cQuery\u00a0)\n\n\u00a0 \u00a0 ::cReturn\u00a0:=\u00a0&quot;&quot;\n\n\u00a0 \u00a0\u00a0WHILE\u00a0.T.\n\u00a0 \u00a0 \u00a0 \u00a0 ::oWeb:Eval(\u00a0cEval\u00a0)\n\n\u00a0 \u00a0 \u00a0 \u00a0\u00a0sleep(100)\n\u00a0 \u00a0 \u00a0 \u00a0 SysWait()\n\n\u00a0 \u00a0 \u00a0 \u00a0\u00a0IF\u00a0!EMPTY(\u00a0::cReturn\u00a0)\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 lReturn := .t.\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 EXIT\n\u00a0 \u00a0 \u00a0 \u00a0\u00a0ENDIF\u00a0\u00a0 \u00a0\n\n\u00a0 \u00a0 \u00a0 \u00a0\u00a0IF\u00a0GetTickCount()\u00a0- nStartSec \u00a0&gt;= nSecond\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0EXIT\n\u00a0 \u00a0 \u00a0 \u00a0\u00a0ENDIF\n\u00a0 \u00a0\u00a0ENDDO\u00a0\u00a0\n\n\u00a0 \u00a0 cReturn := ::cReturn\n\n\u00a0 \u00a0 ::oWeb:bOnBind\u00a0:= ::bOldBind\n\nRETURN\u00a0lReturn\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">METHOD\u00a0<\/span><span style=\"color: #88C0D0\">Query<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">\u00a0cQuery<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> nSecond<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cReturn\u00a0<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\">\u00a0CLASS\u00a0TAWaitWeb<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0\u00a0LOCAL\u00a0nCounter :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">\u00a0<\/span><span style=\"color: #B48EAD\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0\u00a0LOCAL\u00a0lReturn \u00a0:<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> .f.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0\u00a0LOCAL\u00a0cEval \u00a0 \u00a0:<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">\u00a0<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">SendToFWH($QUERY$, &#39;WebFunc&#39;)<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0\u00a0LOCAL\u00a0nStartSec :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">GetTickCount<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0\u00a0DEFAULT\u00a0nSecond :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">\u00a0<\/span><span style=\"color: #B48EAD\">500<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0 ::bOldBind\u00a0:<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> ::oWeb:bOnBind<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0 ::oWeb:bOnBind\u00a0:<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">\u00a0<\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\">\u00a0<\/span><span style=\"color: #81A1C1\">|<\/span><span style=\"color: #D8DEE9FF\"> cJson<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cCalls<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> ... <\/span><span style=\"color: #81A1C1\">|<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">::GetBind<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">\u00a0cJson<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cCalls<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> ...\u00a0<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\">\u00a0<\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0 cEval :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">STRTRAN<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">\u00a0cEval<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\">\u00a0<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">$QUERY$<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cQuery\u00a0<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0 ::cReturn\u00a0:<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">\u00a0<\/span><span style=\"color: #ECEFF4\">&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0\u00a0WHILE\u00a0.T.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0 \u00a0 \u00a0 ::oWeb:<\/span><span style=\"color: #88C0D0\">Eval<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">\u00a0cEval\u00a0<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/span><span style=\"color: #88C0D0\">sleep<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">100<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0 \u00a0 \u00a0 <\/span><span style=\"color: #88C0D0\">SysWait<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0 \u00a0 \u00a0\u00a0IF\u00a0<\/span><span style=\"color: #81A1C1\">!<\/span><span style=\"color: #88C0D0\">EMPTY<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">\u00a0::cReturn\u00a0<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 lReturn :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> .t.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 EXIT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0 \u00a0 \u00a0\u00a0ENDIF\u00a0\u00a0 \u00a0<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0 \u00a0 \u00a0\u00a0IF\u00a0<\/span><span style=\"color: #88C0D0\">GetTickCount<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\">\u00a0<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> nStartSec \u00a0<\/span><span style=\"color: #81A1C1\">&gt;=<\/span><span style=\"color: #D8DEE9FF\"> nSecond<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0EXIT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0 \u00a0 \u00a0\u00a0ENDIF<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0\u00a0ENDDO\u00a0\u00a0<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0 cReturn :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> ::cReturn<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 \u00a0 ::oWeb:bOnBind\u00a0:<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> ::bOldBind<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">RETURN\u00a0lReturn<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>In the TAWaitWeb class, the argument named &#8216;nSecond&#8217; is present. Upon closer examination, this argument is not for&#8230;<\/p>\n","protected":false},"author":1,"featured_media":939,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_kadence_starter_templates_imported_post":true,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-938","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technique-productivity"],"taxonomy_info":{"category":[{"value":4,"label":"Technique"}]},"featured_image_src_large":["https:\/\/www.charleskwon.com\/wp-content\/uploads\/2023\/08\/image-7.png",776,749,false],"author_info":{"display_name":"CharlesKWON","author_link":"https:\/\/www.charleskwon.com\/?author=1"},"comment_info":1,"category_info":[{"term_id":4,"name":"Technique","slug":"technique-productivity","term_group":0,"term_taxonomy_id":4,"taxonomy":"category","description":"","parent":0,"count":8,"filter":"raw","cat_ID":4,"category_count":8,"category_description":"","cat_name":"Technique","category_nicename":"technique-productivity","category_parent":0}],"tag_info":false,"_links":{"self":[{"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=\/wp\/v2\/posts\/938","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=938"}],"version-history":[{"count":3,"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=\/wp\/v2\/posts\/938\/revisions"}],"predecessor-version":[{"id":947,"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=\/wp\/v2\/posts\/938\/revisions\/947"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=\/wp\/v2\/media\/939"}],"wp:attachment":[{"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=938"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=938"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=938"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}