C++多线程select除错

stardragon_mff 2008-10-18 08:16:17
本人小菜,遇到了这样一个错误!描述如下:
我使用了MFC的框架,在CDocument下写了所有的数据,其中有一个方法作为服务器的监听方法,其中用到了死循环select,select设置超时为30秒。在CwinApp的继承类里面定义一个全局函数,作为线程函数,并把CwinApp的指针传递给他,从而获得CDocument的对象,然后调用服务器的监听方法,死循环等待客户端发送数据,程序运行良好,但是在程序退出的时候,不知道该怎么结束这个线程!现在的做法是给select的死循环设置一个变量flag,程序退出时设置flag为假(在CView的析构函数中设置),但是因为select是要阻塞等待30秒的,所以这个线程不会马上结束!可能因此而发生错误。程序每次关闭的时候都会崩溃,用Numega看就是如下加斜线的位置有错误,

AFXTLS.CPP

// special version of CThreadSlotData::GetData that only works with
// thread local storage (and not process local storage)
// this version is inlined and simplified for speed
inline void* CThreadSlotData::GetThreadValue(int nSlot)
{
ASSERT(nSlot != 0 && nSlot < m_nMax);
ASSERT(m_pSlotData != NULL);
ASSERT(m_pSlotData[nSlot].dwFlags & SLOT_USED);
ASSERT(m_tlsIndex != (DWORD)-1);

quickwatch看的话就是:
m_nMax expression cannot be evaluted
...全文
376 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzpsweet 2009-03-12
  • 打赏
  • 举报
回复
up
xiaokunshuai 2009-03-11
  • 打赏
  • 举报
回复
死循环?累不累啊,Cpu不用干别的了,做出来的东西很占资源。可以用socket2.x版本的WSA....()函数,他用消息和事件模式触发处理函数,省时省力。
liuwg9999 2009-02-26
  • 打赏
  • 举报
回复
可以在线程里面设置个标识,如果select在阻塞,先不退出,等30秒过后了在退出线程,不知道行不行
xyshu 2008-11-06
  • 打赏
  • 举报
回复
ding
stardragon_mff 2008-11-02
  • 打赏
  • 举报
回复
经过本人实验,可能是因为TRAceWin的原因,当我把tracewin窗口关掉的时候就没有问题了,奇怪。。。。
hagangqiou 2008-10-27
  • 打赏
  • 举报
回复
up
arong1234 2008-10-26
  • 打赏
  • 举报
回复
估计是你跨线程使用了不能跨线程的东西,例如CAsyncSocket/CSocket/CWnd以及所有他们的派生类都不能跨线程。假如你在线程1中调用CAsyncSocket::Create,在线程2中调用CLose,必然崩溃
[Quote=引用楼主 stardragon_mff 的帖子:]
本人小菜,遇到了这样一个错误!描述如下:
我使用了MFC的框架,在CDocument下写了所有的数据,其中有一个方法作为服务器的监听方法,其中用到了死循环select,select设置超时为30秒。在CwinApp的继承类里面定义一个全局函数,作为线程函数,并把CwinApp的指针传递给他,从而获得CDocument的对象,然后调用服务器的监听方法,死循环等待客户端发送数据,程序运行良好,但是在程序退出的时候,不知道该怎么结束这个线程!现在的…
[/Quote]
powerzha 2008-10-25
  • 打赏
  • 举报
回复
用ontime 说不定可以解决你的问题的
结束程序的时候killtime就可以了.
jfwcn 2008-10-25
  • 打赏
  • 举报
回复
路过,没有看懂,window版的就不要用select了。多启动几个进程就可以了。我乱说的
stardragon_mff 2008-10-18
  • 打赏
  • 举报
回复
大侠们要看哪里,我粘上来就是了O(∩_∩)O哈哈~
qqwx_1986 2008-10-18
  • 打赏
  • 举报
回复
这么点代码好像看不到你的问题

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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