我正在创建一个聊天对象' AutoIT中的客户端和服务器。服务器目前看起来像
i.imgur.com/2XXgeSn.png
客户端目前看起来像
i.imgur.com/HpMy1hY.png
目前两者之间的沟通是完美的,我没有麻烦,除了服务器上的关闭按钮不起作用。原因是;是因为我运行的Do-Until循环需要拾取传入的数据才占用thread1。我知道AutoIT不是多线程的,并且随着Do-Until的不断运行,GUI几乎消失了。我该怎么做才能解决这个问题?
答案 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)