关于ThreadEnd事件

jinxintang 2006-06-07 11:55:00
本人用阻塞式多线程编写了一个小程序,其中线程部分如下:

void __fastcall TMyServerThread::ClientExecute(void)
{
// make sure connection is active
while (!Terminated && ClientSocket->Connected)
{
try
{
// Now, use TWinSocketStream to read or write information
// over a blocking socket connection
TWinSocketStream *pStream = new TWinSocketStream(ClientSocket, CLIENTWAITTIME);

try
{
char buffer[BUFFERSIZE];
memset( buffer, 0, sizeof(buffer) );

// give the client 60 seconds to start writing
if (pStream->WaitForData(CLIENTWAITTIME))
{
if (pStream->Read(buffer, sizeof(buffer)) == 0)
// (if can't read in 60 seconds) than close the connection
ClientSocket->Close();
else
{
// Client to Server test text
Form1->memLog->Lines->Add(AnsiString("(Client) ") +AnsiString(buffer) );

// Back again to Client
pStream->Write( buffer, sizeof(buffer));
}

// ...
// Process requests here.
// ...
}
}
__finally
{
delete pStream;
}
}
catch (...)
{
HandleException();
}
}

}

现在有个问题是:我在客户端调用Client->Close();服务器端只出发了ClientDisconnect事件,并没有出发ThreadEnd事件。
当我关闭服务器端程序时却响应了ThreadEnd事件,我在该事件中只有一行代码:memLog->Lines->Add("ThreadEnd");程序总是报地址访问违例的错误。memLog是个TMemo。


...全文
281 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinxintang 2006-06-07
  • 打赏
  • 举报
回复
把ThreadCacheSize设为0,也不响应
jinxintang 2006-06-07
  • 打赏
  • 举报
回复
那为什么会报错呢???
我把memLog->Lines->Add("ThreadEnd");换成了ShowMessage("ThreadEnd"););
当我关闭窗口时,也会响应ThreadEnd事件但却不弹出窗口。前台程序关闭了(界面和windows任务栏都没了),但在任务管理器中还能看到此进程。
pp616 2006-06-07
  • 打赏
  • 举报
回复
TCustomServerSocket::ThreadCacheSize
Specifies the maximum number of threads that can be reused for new client connections.

如果想关闭客户端就响应ThreadEnd 把ThreadCacheSize设为0试试
我不懂电脑 2006-06-07
  • 打赏
  • 举报
回复
因为服务器使用了线程池机制,所以关闭客户端不一定会引起线程结束。
我不懂电脑 2006-06-07
  • 打赏
  • 举报
回复
那为什么会报错呢???
如果使用了象TButton这样的界面控件要用同步方法Synchronize
代码下载链接: https://pan.quark.cn/s/a4b39357ea24 Books-Management-System C语言期末大作业——图书信息管理系统(C语言,单链表) 题目内容 ========== 1.系统名称 ------- 六、图书信息管理程序 2.基本要求 ------- 使用链表保存图书信息,每个节点要求包含图书的编号、书名、作者、购买日期和价格信息; 可以对当前图书数据库进行增加、删除操作,并实现按图书编号进行查询; 系统完成后应实现类似下图所示界面; 完成内容 ========== 1.基本任务 ----------- 使用链表保存图书信息: 图书编号; 图书名; 图书作者; 图书库存数量; 图书价格; 可对链表进行CRUD操作: 有Shell界面 2.拓展任务 ----------- 使用Git管理代码; 推送到上开源: 将代码分模块开发; 查询功能扩展根据书名和作者查询 有一定的异常管理机制; 设计内容 ========== 1.代码结构设计 --------------- 2.系统模块设计 --------------- 3.数据结构设计 ---------------- 3.1.链表: 结构体标志:Node 结构体声明变量:Book 结构体成员列表: 结构体代码: 4.算法设计 ------------ 4.1.冒泡排序法: 时间复杂度:$$O\left( n^{2} \right)$$; 算法原理: 比较相邻的元素。 如果第一个比第二个大,就交换他们两个; 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。 在这一点,最后的元素应该会是最大的数; 针对所有的元素重复以上的步骤,除了最后一个; 持续每次对越来越少...

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧