从CAsyncSocket的派生类:
class CPeekDataSocket : public CAsyncSocket
{
.
.
.
};线程函数:
DWORD WINAPI PeekDataFunc(LPVOID lpParam)
{
CPeekDataSocket PeekDataSocket;
PeekDataSocket.Create();
PeekDataSocket.Connect(IPAddress,Port);//这里就出现 WSAEWOULDBLOCK 10035 错误
while (::GetMessage(&msg,0,0,0))
{
.
.
.
}
}是不是线程里没办法使用CAsyncSocket的派生类啊
救命啊,这条路只有继续走下去,不能回头重新设计程序结构了,高手帮忙
class CPeekDataSocket : public CAsyncSocket
{
.
.
.
};线程函数:
DWORD WINAPI PeekDataFunc(LPVOID lpParam)
{
CPeekDataSocket PeekDataSocket;
PeekDataSocket.Create();
PeekDataSocket.Connect(IPAddress,Port);//这里就出现 WSAEWOULDBLOCK 10035 错误
while (::GetMessage(&msg,0,0,0))
{
.
.
.
}
}是不是线程里没办法使用CAsyncSocket的派生类啊
救命啊,这条路只有继续走下去,不能回头重新设计程序结构了,高手帮忙
解决方案 »
- 如何清除鼠标划的线
- VC读取文件内容出乱码
- snmp中如何使用 get set getnext 命令
- 一个句柄获得的问题
- 入门问题请教:如何成比例缩放
- 请问有没有提供查阅windows API 函数的软件?
- QQ的聊天纪录存在MsgEx.db文件,但是打开是是乱码。谁知道用什么软件可以看呢??
- winmain 与 控制台
- 我们使用别人的控件,在调用控件的redrawwindow后要在控件窗口上画些我们自己的东西,但由于我们无法判断控件重画已经完成,因此往往我们
- 将网页中的一个超链接拖到我的窗口中,如何得到这个超链接的内容?[100分]
- 如何实现C编写的程序与MFC实现进程间数据共享?
- 加入自己的头文件,链接是出错,百思不得其解。
初始化socket的环境了?
================================
已经初始化了
{
AfxMessageBox("Ì×½Ó×Ö³õʼ»¯Ê§°Ü");
return FALSE;
}需要在每个线程中都要来吗?
----------------------------------------------------------------------
这条提示信息好奇怪,看不懂耶~!
AfxMessageBox("Ì×½Ó×Ö³õʼ»¯Ê§°Ü");
----------------------------------------------------------------------
这条提示信息好奇怪,看不懂耶~!
=============================================================================
中文的就变这个样子了
BEGIN
GOTO 10楼;
END
ELSE
BEGIN
GOTO 20楼;
END
WSAEWOULDBLOCK 10035 无法立即完成一个非阻挡性套接字操作。 要知道连接是否成功,调用select就知道了。
不防把服务端贴上来
要知道是不是连接成功,要在 OnConnect中进行判断。
不过建议你Connect后,Sleep(100)一般都可以了。
不防把服务端贴上来
========================================
这个不是问题,有两个版本的,有一个工作正常,一样的写法,不同之处就是正常工作的那个 作为了CDialog的派生类的一般数据成员,消息映射就是正常的,不正常的这个是在线程函数的堆栈上创建的对象,这个是唯一的一个不同点
不防把服务端贴上来
========================================
这个不是问题,有两个版本的,有一个工作正常,一样的写法,不同之处就是正常工作的那个CAsyncSocket的派生类作为了CDialog的派生类的一般数据成员,消息映射就是正常的,不正常的这个是在线程函数的堆栈上创建的对象,这个是唯一的一个不同点
要知道是不是连接成功,要在 OnConnect中进行判断。
不过建议你Connect后,Sleep(100)一般都可以了。
================================================
我用select判断了,就是进不了这些消息相应函数
定义为全局变量试试
定义为全局变量试试
==================================
全局变量不行,每个线程需要独立的一个不知道线程局部存储支不支持这个
当我把MFC设成SHARED的时候,在线程里面加个AfxSocketInit()就可以,但是如果是STATIC的时候也还是不行的要不的话,用全局的话好像也可以解决的
CAsyncSocket的回调机制其实是使用了窗口的消息投递机制来实现。
你的问题应该是消息投递到了主线程中创建的窗口的缘故。
彻底抛弃CAsyncSocket,使用socket API吧!我就从来不用CAsyncSocket和CSocket,因为它会经常出现一些莫名其妙的问题。
一次我的项目调用了CSocket::Create后,只要一打开输入法,程序就崩溃。但只要不调用Create,就没有问题,跟进MFC源码发现CAsyncSocket作了很多与窗口有关的处理,但始终没找到原因,最后我自己用socket API重写了一个CSocket类才解决了问题。