用线程访问WinSocket是否安全?

Zhong 2000-02-23 11:36:00
用线程访问WinSocket是否安全?即在线程的Execute方法中不用调用Synchronize方法去执行ClientSocket.Socket.SendBuf?
如:
procedure TThreadSend.Execute;
begin
...
repeat
...
ClientSocket.Socket.SendBuf(pBuff^, StrLen(pBuff));
//而非Synchronize(ClientSocket.Socket.SendBuf(pBuff^, StrLen(pBuff)));
...
until Terminated;
...
end;

...全文
252 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Firing_Sky 2000-02-23
  • 打赏
  • 举报
回复
解决办法
1。两个线程分别使用2个Socket
2。在Synchronize存放并修改Socket的使用标志

如果像现在你在上面写的那样,有可能两个线程同时调用一个Socket,会出错的
Lin 2000-02-23
  • 打赏
  • 举报
回复
To Firing_Sky:
我的意思是不用Synchronize函数,因为其实它是在调用主线程去完成发送工作,当这个过程很长时,系统就跟死锁了一样,不响应输入,直到发送工作完成。
而我想用两个独立的线程,相互不依赖。譬如,当用户点击Button时,激活第二个线程后台发送。
象我写的那样是不会出问题的,因为我也用了Synchronize,还有其他代码来保证。上面的只是举例而已。
Firing_Sky 2000-02-23
  • 打赏
  • 举报
回复
如果像现在你写的那样,肯定会出问题的
Firing_Sky 2000-02-23
  • 打赏
  • 举报
回复
No matter.
但要记住,与Socket相关的操作都要放在线程的Synchronize()函数里
Firing_Sky 2000-02-23
  • 打赏
  • 举报
回复
No matter.
但要记住,与Socket相关的操作都要放在Synchronize()函数里
dnchen 2000-02-23
  • 打赏
  • 举报
回复
建议用timer而不要用线程

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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