在AutoIT中运行函数时的GUI

时间:2014-03-16 05:26:24

标签: multithreading user-interface autoit

我正在创建一个聊天对象' AutoIT中的客户端和服务器。服务器目前看起来像

i.imgur.com/2XXgeSn.png

客户端目前看起来像

i.imgur.com/HpMy1hY.png

目前两者之间的沟通是完美的,我没有麻烦,除了服务器上的关闭按钮不起作用。原因是;是因为我运行的Do-Until循环需要拾取传入的数据才占用thread1。我知道AutoIT不是多线程的,并且随着Do-Until的不断运行,GUI几乎消失了。我该怎么做才能解决这个问题?

Server CodeClient Code

1 个答案:

答案 0 :(得分:0)

您可以将表单的检查分解为自己的函数,然后在Do..Until循环中调用该函数。下面的服务器代码副本包含这些更改:

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("VChat", 616, 438, 192, 124)
$Input1 = GUICtrlCreateInput("", 8, 8, 513, 25, $ES_READONLY)
$Button1 = GUICtrlCreateButton("Send", 528, 8, 75, 25)
GUICtrlSetState(-1, $GUI_DISABLE)
$Edit1 = GUICtrlCreateEdit("", 8, 40, 593, 385, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_VSCROLL))
GUICtrlSetData(-1, "")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

TCPStartup()
$TCPListen = TCPListen(@IPAddress1, 80)

Func CheckForClose()
  $nMsg = GUIGetMsg()
  Switch $nMsg
   Case $GUI_EVENT_CLOSE
      Exit
  EndSwitch   
EndFunc

Func retrieveData()
  Do
    Local $TCPAccept = TCPAccept($TCPListen)
    CheckForClose()
  Until $TCPAccept <> -1

  Do
    Local $TCPRecv = TCPRecv($TCPAccept, 1000000)
    CheckForClose()
  Until $TCPRecv <> ""

  GUICtrlSetData($Edit1, GUICtrlRead($Edit1) & $TCPRecv & @CRLF)
EndFunc

While 1
  retrieveData()
WEnd

Run(@ScriptFullPath)