遇到一个问题不知道该怎么解决了,大家帮帮忙吧,多谢了。
首先,创建一个SOCKET是不是系统就为你创建了对应的一个线程;
然后,有一个具体的问题。
我写了这样的一个函数:
QueryRemoteData(CString& strData, const CList<REMOTE_ADDR, REMOTE_ADDR>& lstRemote)
根据CList中保存的远程机器的地址和端口,建立SOCKET分别与其连接;获取所需的数据后用strData返回。
问题是:我不知道我所发出的SOCKET请求是否得到回应,如果得到回应,要多长时间;所以我必须在这个函数中等待一定的时间,时间到了以后,更新strData,返回;我觉得一个SOCKET对应一个线程,也就是说我已经创建了其他的一些线程,于是我试图阻塞当前线程,也就是该函数,使用的是WaitForSingleObject,等待时间设为5秒,但我好像想错了,该函数被阻塞,但其他的线程也无法正常运行,是不是对应SOCKET的不是线程?我应该怎么解决这个问题?我希望尽量不要改变函数的形式,因为这样一来就要做很大的改动。大家有没有遇到过这种情况,帮帮忙啊。万分感谢!
首先,创建一个SOCKET是不是系统就为你创建了对应的一个线程;
然后,有一个具体的问题。
我写了这样的一个函数:
QueryRemoteData(CString& strData, const CList<REMOTE_ADDR, REMOTE_ADDR>& lstRemote)
根据CList中保存的远程机器的地址和端口,建立SOCKET分别与其连接;获取所需的数据后用strData返回。
问题是:我不知道我所发出的SOCKET请求是否得到回应,如果得到回应,要多长时间;所以我必须在这个函数中等待一定的时间,时间到了以后,更新strData,返回;我觉得一个SOCKET对应一个线程,也就是说我已经创建了其他的一些线程,于是我试图阻塞当前线程,也就是该函数,使用的是WaitForSingleObject,等待时间设为5秒,但我好像想错了,该函数被阻塞,但其他的线程也无法正常运行,是不是对应SOCKET的不是线程?我应该怎么解决这个问题?我希望尽量不要改变函数的形式,因为这样一来就要做很大的改动。大家有没有遇到过这种情况,帮帮忙啊。万分感谢!
解决方案 »
- 在对话框中双击新建的按钮不能自动添加消息响应函数
- 加油啊,頂,在RICHEDIT播放FLASH文件,會的人,我號給你,分自理啊
- 请问有没有办法将OpenGL绘制好的场景存储为Bitmap文件?
- 关于序列化的一个小问题:我如何序列化一个byte数组,这个数组很大,不会让我遍历吧
- 在主框架窗口的一消息响应函数里用ShellExecute()方法调用另一个exe程序时遇到的问题。谢谢!
- 请教采集声卡输入数据的思路
- 如何获得其他程序窗口中带有焦点的控件的句柄呀,我想使用GetFocus函数获得,可是不行,请大家指导我1下。
- 请问如何给一个二维数组整体赋值
- 有那位大虾用过微软的Speech API没?跟个贴。
- 急急急100分送上--我的网络为什么配置不通?
- 请问用Dao怎样设置 一个FIELD为primary key
- 关于单选框创建关联变量的问题
for (POSITION pos = lstRemote.GetHeadPosition(); pos != NULL;) {
REMOTE_ADDR addr = lstRemote.GetNext(pos); THRDPARAM ThrdParam;
ThrdParam.addr = addr;
ThrdParam.pTSAgent = this; AfxBeginThread(ReqThread, &ThrdParam, THREAD_PRIORITY_NORMAL);
} // 等待TIME_TO_WAIT的时间,放弃没有收到回应的SOCKET
while (true) {
CEvent event;
::WaitForSingleObject(event.m_hObject, TIME_TO_WAIT);
break;
} strData = REMOTE_HOST;
strData += m_strRemoteData; // 删除等待SOCKET队列
for (POSITION posSocket = g_pSocketList.GetHeadPosition(); posSocket != NULL;) {
CReqSocket* pToDel = (CReqSocket*)g_pSocketList.GetNext(posSocket);
pToDel->Close();
delete pToDel;
}
g_pSocketList.RemoveAll();