我编写多线程任务时,出现了以下问题,高手帮忙解决:
我在做抓包工具,想用一个线程专门负责抓包,可是主线程调用 AfxBeginThread(Cappacketthread,GetSafeHwnd());后需要WaitForSingleObject(m_eventEnd,INFINITE);来等待,否则生成的线程不工作。可是用wait等待后,主线程停止响应,好像全部操作都在抓包线程了,我试了好多遍,要是抓包线程很快结束(设置变量),主线程随即恢复正常!请高手赐教!(我不知道问题讲清楚没)[email protected]
QQ287562838
随时可以讨论!

解决方案 »

  1.   

    你在主线程里面调用WaitForSingleObject(m_eventEnd,INFINITE);
    意思就是当抓包线程没有退出时,主线程被挂起,当然就停止响应了,抓包线程启动后,没有必要挂起主线程
      

  2.   

    主线程调用 AfxBeginThread(Cappacketthread,GetSafeHwnd());子线程就开始工作了,不需要
    WaitForSingleObject(m_eventEnd,INFINITE);但是如果主线程结束了,那么子线程也就结束了
      

  3.   

    抓包工具需要同步什么呢?
    同步,就是和多线程矛盾的东西,是对于多线程的单通道处理,所以,你通常在某个耗时较少的模块中同步处理,比如更新数据库\全程公用变量等,对于网络连接,这种可能需要超时控制的,通常以信号量控制,比如同时不超过20个线程,你可以用WaitForSingleObject(m_eventEnd,INFINITE)获取一个空闲的连接对象(对象个数是有限的),如果没有空闲,就等待,在线程中,对象是用结束,就设置为空闲--这是一种方法...