全局变量:
CWinThread *m_pServerListenThread ;// 服务器监听线程
CSocket *m_SerSocket ; // 服务socket
在CDialog::OnInitDialog构造了m_SerSocket开始按钮触发事件代码如下:
if( m_SerSocket->Create(PORT) == 0 )//PORT 7777
return ;
if( m_SerSocket->Listen() == 0 )
return ;
m_pServerListenThread = ::AfxBeginThread(_ListenThread,this) ;_ListenThread代码如下:
CSocket *m_RecSocket ; // 客户连接的套接字
for(;;)
{
SOCKADDR_IN client;
int iAddrSize=sizeof(client);
m_RecSocket = new CSocket() ;
m_SerSocket->Accept(*m_RecSocket,(SOCKADDR *)&client,&iAddrSize)
{
continue ;
}
//
}
return 0 ;停止按钮触发事件代码如下:
TerminateThread(m_pServerListenThread->m_hThread,0);
m_SerSocket->Close() ;
问题在于点击停止时偶尔会执行到TerminateThread()函数时程序就终止反映,
请问是为什么?还有,在线程中使用socket我觉得我的做法不太好
大家有什么好的建议吗?望各位指教了
CWinThread *m_pServerListenThread ;// 服务器监听线程
CSocket *m_SerSocket ; // 服务socket
在CDialog::OnInitDialog构造了m_SerSocket开始按钮触发事件代码如下:
if( m_SerSocket->Create(PORT) == 0 )//PORT 7777
return ;
if( m_SerSocket->Listen() == 0 )
return ;
m_pServerListenThread = ::AfxBeginThread(_ListenThread,this) ;_ListenThread代码如下:
CSocket *m_RecSocket ; // 客户连接的套接字
for(;;)
{
SOCKADDR_IN client;
int iAddrSize=sizeof(client);
m_RecSocket = new CSocket() ;
m_SerSocket->Accept(*m_RecSocket,(SOCKADDR *)&client,&iAddrSize)
{
continue ;
}
//
}
return 0 ;停止按钮触发事件代码如下:
TerminateThread(m_pServerListenThread->m_hThread,0);
m_SerSocket->Close() ;
问题在于点击停止时偶尔会执行到TerminateThread()函数时程序就终止反映,
请问是为什么?还有,在线程中使用socket我觉得我的做法不太好
大家有什么好的建议吗?望各位指教了
解决方案 »
- STL的map和opencv冲突,报以下错误,如何解决啊?谢谢
- 如何完成“点击两个不同的按钮,弹出两个不同的对话框”的功能?
- 求解汉字的各种编码
- MFC中的函数指针
- ADO EXTENSION 绑定之后, 在AddNew操作中如何利用“自动编号”字段。
- 如何让textbox在程序启动的时候自动变成输入状态
- 日期和时间的转换问题
- CEditView的绘图函数在那里
- 在Windows下,怎样用WINAPI而不用mscomm控件,来操纵串口。最好有源码。谢谢先。
- 100分求解,如何编程序改变位图的画质?
- 打开“选择文件夹”的API函数是哪个?急!!!!!!
- 寻求算法,怎样实现这样一个基于WEB的服务专家系统.大家帮忙呀!
因为你强行杀死线程可能会导致堆栈错误。
首先创建事件:
HANDLE m_hQuitEvent; // handle to the quit event
m_hQuitEvent = CreateEvent( NULL, FALSE, FALSE, TEXT("Quit"));
if( !m_hQuitEvent )
{
AfxMessageBox("CreateEvent failed!");
return;
}
for(;;)
{
DWORD rc = WaitForSingleObject(m_hQuitEvent, 1);
if (rc == WAIT_OBJECT_0)
{
break; // quit
}
退出时:
SetEvent(m_hQuitEvent);
即可。
CloseHandle(m_hQuitEvent);
关于多线程开发socket我有几点不是特别清楚,望你指教 1.我在网上开到的例子有很多都不是多线程处理socket,CAsyncSocket和CSocket的对应用程序的性能影响分别有多大?推荐来说是否用的上多线程(比如聊天程序). 2.如果使用多线程开发,在线程中有死循环,接收触发的事件退出线程是不是最为合理的,有些代码的写法让我不着门路,是在线程函数的最后一句为开创一个新的线程,的确也实现了原定方案,当对性能的影响也应该很大吧? 具体应该怎么样呢?有没有很经典的多线程的例子让我参考一下?
本身CSocket就是异步的
你可以继承CSocket类
在重载OnAccept函数就可以了