本帖最后由 VisualEleven 于 2012-06-01 07:41:36 编辑

解决方案 »

  1.   

    问题一:http://blog.csdn.net/cjf_iceking/article/details/7552802
    我的博客中的,实践过
      

  2.   

    问题二,你用的是何种方式捕获数据包的,pcap_loop?
      

  3.   

    嗯,就是pcap_loop。
    我是在pcap_loop里通过::PostMessage(h_maindlg,WM_USER_THREAD_PACKET, (WPARAM) (pkt), 0);把数据发到主线程去解析,然后再在列表控件显示出来。也就是每来一个数据,主线程就收一次消息,而迅雷的包太多,导致主线程消息太多,出了问题。
    不知道有没有这种可能?
      

  4.   

    打算再开一个界面线程。但不知怎么操作。我现在是如下操作的,各位看看可以不?
    继承class CMyUIThread : public CWinThread
    然后在CMyUIThread 类里写实现函数,
    通过pThreadjie = AfxBeginThread(RUNTIME_CLASS(CMyUIThread));的pThreadjie 这个指针调用,可以吗?
    可不可以直接用AfxBeginThread创建工作线程和界面线程?可以的话,怎么操作呢?
      

  5.   

    取包的间隔设置大些。Post数据时,可以累积一定之后再POST,不要每个包都POST消息。退出线程,如果要强制退出,处理WM_CLOSE消息,post消息或者event给线程。如果此时线程不是处于一个忙循环处理,wait这个退出even,然后释放内存,线程自己return。主线程检测线程状态。WaitSingleObject等待线程的退出事件激发,设置等待超时时间,超出,就强制terminal这个线程。如果你的工作线程里有循环,一定要在每个循环里检测是否有退出事件或者消息,没有继续循环,有了就收拾收拾,return。
      

  6.   

    怎么样叫累积一定之后再POST,不要每个包都POST消息呢?
      

  7.   

    你把工程上传到 csdn资源中去 给看下你是怎么做的......另外如果你在抓包之后需要解析展示:
    可以采用这个过程,一个进程负责抓包并将数据包存储与pcap文件中,通过管道通知主进程(解析展示进程),主进程从文件读取数据包并进行解析展示。