一个多线程漏洞扫描程序,扫描结果要显示在列表控件(CListCtrl)中,
在OnInitDialog()中定义:pList=(CListCtrl*)GetDlgItem(IDC_RESULT);
pList在程序开始部分定义为CListCtrl指针。
在扫描线程函数scan()中有语句:pList->InsertItem(0,"aaaaaaa");
编译没有错误,
但当扫描线程函数执行到pList->InsertItem(0,"aaaaaaa")时就死掉了,
各位高手,是什么原因?怎么解决呢?

解决方案 »

  1.   

    在一个线程中创建的MFC对象不能在另一个线程中访问和操纵
      

  2.   

    pList指针就是一个全局变量啊?等待!
      

  3.   

    通过消息,主窗口掌管消息函数,把"aaaaaaa"的地址作为SendMessage的一个param,主窗口收到消息后把param转换为(char *)param就可以取出字串了
      

  4.   

    我是想让每个线程独立处理结果(输出或是不输出信息),在实际使用的时候“aaaaaaaa”是一个线程的内部变量,程序编译没有错,但一执行到
    pList->InsertItem(0,"aaaaaaa")就死机,难道没有办法从现成输出?能不能讲详细点?
      

  5.   

    在线程中总该有个char strFrom = "aaaaaaaaa";之类的东西吧
    在线程中调用::SendMessage(hwnd, WM_YOUR_MSG, 0, strFrom);
    pList都能传到线程中,主窗口的hwnd传进来应该没什么问题吧。 在主窗口的消息处理函数中
    char *strTo = (char *)lparam;
    list.InsertItem(0, strTo);
    不就OK了吗
      

  6.   

    sorry
    char strFrom = "aaaaaaaaa";应该是char strFrom[] = "aaaaaaaaa";
      

  7.   

    传递 HWND 作为 Thread 的参数.
      

  8.   

    在pList->InsertItem(0,"aaaaaaa");处设置一个断点,单步执行,先看看是为什么死机。
      

  9.   

    是非零的,pList是我在程序的OnInitDialog()中定义的一个全局变量!
      

  10.   

    回复人: yym314(前途无亮) (  ) 信誉:100  2002-06-20 20:34:00  得分:0  
     
     
      在一个线程中创建的MFC对象不能在另一个线程中访问和操纵
     
     
    别人已经回复你了
    有人也告诉你方法了,你还执著的要从线程来修改
    真搞不懂你是怎么想的
      

  11.   

    有可能是如下原因,但我没有试过。
    你的pList是一个指针,在你用如下语句前没有给指针分配空间,
    pList=(CListCtrl*)GetDlgItem(IDC_RESULT);
    这时,指针是指向一个随机的地址,这样,当你用这指针操作时,有可能引起内
    存错误。所以你在使用它之前,给它分配一个空间试试。