一个关于线程、socket和定时器的问题,please help me!

onjun 2001-02-13 11:02:00

我在写一个thread,socket,timer相关的程序。

描述:

完全 API 编程。

在线程中创建 socket(阻塞模式),进行通信。

我要设定一个定时器 timeout,如果没有通信(空闲)的时间大于timeout,

杀掉当前线程。

关键词: 阻塞,计时,杀掉线程。

我的做法:
static void CALLBACK TimeProc(hwnd,msg,idEvent,time)
{
PostThreadMessageBox((DWORD)idEvent,WM_CLOSE,0,0);
AfxMessageBox("Now kill thread");
}
MYCtrlFun(LVOID lParam)
{
id=GetCurrentThreadId();
::SetTimer(NULL,(UINT)id,2000,TimeProc);

while(TRUE)
{
// do my work
recv(...);
// then
send(...);
...
}
}


发现问题:
程序执行到 TimeProc 的时间 不是 2000(两妙),而是更长。

有时候没有执行到 TimeProc,因为我没有看到"Now kill thread"对话框。

请大家帮忙!

谢谢
...全文
141 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
onjun 2001-02-15
  • 打赏
  • 举报
回复
大家好,我以前没有做过异步winsocket编程。

MSDN 上的例子看过了,他接受用的是 WSArecvEx();
而我想用recv();行不行?

我从客户端发送登陆命令(我自己定义的),服务器已经收到,收到之后,服务器向客户端发送反馈信息时,send()返回值为-1,程序退出。为什么?

在异步编程中,有无必要使用select()函数?
如有必要,select()与ioctrlsocket()的调用顺序是怎样的呢?

望不吝赐教!!!

谢谢了!!!
onjun 2001-02-14
  • 打赏
  • 举报
回复
hi,lhxx(随风):

有没有这方面的例子?

或者详细一点。

谢了
随风bj 2001-02-14
  • 打赏
  • 举报
回复
用定时器来计算阻塞时间是不稳定的,因为系统的运行负荷会影响它的时间间隔
既然你用的是API而且又要在一定的时间内反映,那么可以用异步方式再加上设置
Time-Out的值来实现可能更好

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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