问题:如果用阻塞的操作,当我的一个线程在accept或者recv的话,如何中止掉它?或者只能通过强行将线程中止掉?
解决方案 »
- 工具栏停靠问题//EnableDocking(CBRS_ALIGN_ANY);不是很多余吗?
- 关于CTime的一个小问题
- 求解汉字的各种编码
- 线程间 协调工作~进来看看呗,付源码,带注释,新手也看看,呵呵。
- 学习2周VC 做了个系统,怎样新建MDI子窗口,
- 单文档VC程序中如何弹出一个DOS窗口并运行类似printf()语句。
- 怎样在delphi中调用一段C++代码,急啊,在线等
- 如何编程得到最近使用过的文档的全路径.
- 我想做一个位图背景的工具条类,但不知从何下手,高手请指点?
- VS2008类向导加载出错,求高手指教
- CTABCTRL????
- 程序如何为对话框中的CEdit控件增加WS_VSCROLL属性?
here is code fragment.
fd_set readfds;
FD_ZERO (&readfds);
FD_SET (m_hSock, &readfds);
if (::select(0, &readfds, NULL, NULL, &g_timeOut) == 1)
return (::recv (m_hSock, (char*)m_szBuf, MSG_LENGTH, NO_FLAGS_SET));
return 0;
closesocket(); 任何阻塞都会返回。
在accept()或recv()/send()的线程,先进行一个类似RequestWaitEvent(ThreadID)的调用,取得一个WSAEVENT句柄,然后,用WSAEventSelect()设置socket,然后WSAWaitForMultipleObject()需要维护一个ThreadID-EventHandle的表,可能有点麻烦
如果不支持,就不可行
我不熟悉Unix