我有两个程序,一个用于客户端,一个用于服务器。他们可以使用Threads通过聊天互相交谈。
我添加了两个按钮,一个用于客户端,另一个用于服务器从服务器向客户端发送文件。
当我将客户端连接到服务器时,我启动了线程,它等待接收具有recv()
功能的东西。
问题在于,当我想将文件发送到客户端因为线程处于唤醒状态时传输不起作用。
当我不使用线程时,传输工作正常。 我的问题是:我可以通过单击按钮来停止该线程吗?
PS:我是Threads的初学者
这是我使用Threads的代码:
delegate System::Void PrintStringDel(String^ str);
void PrintString(String^ str) {
txtReceive->Text += str;
txtReceive->SelectionStart = txtReceive->Text->Length;
txtReceive->ScrollToCaret();
}
void ReceiveThread() {
int ByteReceived;
char buff[1024];
while(true) {
ByteReceived = recv(SendingSocket, buff, sizeof(buff), 0);
if(ByteReceived > 0) {
PrintStringDel^ print = gcnew PrintStringDel(this, &Form1::PrintString);
String^ text = gcnew String(buff);
txtReceive->BeginInvoke(print, text);
}
}
}
在Connect()客户端
上 ...
Threading::ThreadStart^ ts = gcnew Threading::ThreadStart(this,
&Form1::ReceiveThread);
Threading::Thread^ t = gcnew Threading::Thread(ts);
t->Start();