在AutoIT中运行函数时的GUI



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

i.imgur.com/2XXgeSn.png

客户端当前看起来像

i.imgur.com/HpMy1hY.png

目前两者之间的通信是完美的,我没有任何问题,除了服务器上的关闭按钮不工作。原因是;是因为我正在运行的用于获取传入数据的Do-Until循环占用了thread1。我知道AutoIT不是多线程的,随着Do-Until的不断运行,GUI几乎是空白的。我能做些什么来解决这个问题?

服务器代码,客户端代码

您可以将表单close的检查分解到它自己的函数中,然后在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)

相关内容

  • 没有找到相关文章

最新更新