我在对话筐初始化的的时候,开了一线程hThread = (HANDLE)_beginthreadex( NULL, 0, (unsigned int (__stdcall *)(void *))SetUpDownLoadConnect, this, 0, &threadID )
不停的,看一个list里面有值存在没有,对其进行一些操作问题时,有可能,我会要清空这个list,这个程序有可能因为这个动作崩溃的,怎么办?
清空的时候,先让,线程阻塞一下么?
完后继续让线程开始?

解决方案 »

  1.   

    线程同步???EnterCriticalSection/LeaveCriticalSection() ??
      

  2.   

    崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
      

  3.   

    6楼的意思,是让你自己在发生错误的时候,从发生错误的地方开始一直往回查错误原因
    而不是让你把错误发出来让我们来给你找原因,而且你所发来的错误根本就不能明确知道错误信息在独立线程里面,不要直接操作窗口类,最好是传窗口句柄来让线程操作
    不然在销毁窗口的时候,有可能在主线程里面这个类已经释放,但是线程里面还不能发现这个类已经销毁再有就是你说的这个 list,是一个链表?还是一个列表窗口?如果是链表,就用临界锁或者类似功能的东西来做如果是列表窗口,也可以用临界锁或者类似的东西来做,还有就是你程序崩溃,是发生在删除 list 成员时发生,那肯定是访问到了无效序号而引发的问题了。这情况一般发生在操作窗口类的情况
    所以如果你传窗口句柄进去,再用 sendmessage 来操作,起码发生错误不会崩溃,你所要做的就是判断返回值
      

  4.   

    6楼的意思,是让你自己在发生错误的时候,从发生错误的地方开始一直往回查错误原因
    而不是让你把错误发出来让我们来给你找原因,而且你所发来的错误根本就不能明确知道错误信息在独立线程里面,不要直接操作窗口类,最好是传窗口句柄来让线程操作
    不然在销毁窗口的时候,有可能在主线程里面这个类已经释放,但是线程里面还不能发现这个类已经销毁再有就是你说的这个 list,是一个链表?还是一个列表窗口?如果是链表,就用临界锁或者类似功能的东西来做如果是列表窗口,也可以用临界锁或者类似的东西来做,还有就是你程序崩溃,是发生在删除 list 成员时发生,那肯定是访问到了无效序号而引发的问题了。这情况一般发生在操作窗口类的情况
    所以如果你传窗口句柄进去,再用 sendmessage 来操作,起码发生错误不会崩溃,你所要做的就是判断返回值非常感谢,我再看看怎么回事,谢谢了
      

  5.   

    6楼的意思,是让你自己在发生错误的时候,从发生错误的地方开始一直往回查错误原因
    而不是让你把错误发出来让我们来给你找原因,而且你所发来的错误根本就不能明确知道错误信息在独立线程里面,不要直接操作窗口类,最好是传窗口句柄来让线程操作
    不然在销毁窗口的时候,有可能在主线程里面这个类已经释放,但是线程里面还不能发现这个类已经销毁再有就是你说的这个 list,是一个链表?还是一个列表窗口?如果是链表,就用临界锁或者类似功能的东西来做如果是列表窗口,也可以用临界锁或者类似的东西来做,还有就是你程序崩溃,是发生在删除 list 成员时发生,那肯定是访问到了无效序号而引发的问题了。这情况一般发生在操作窗口类的情况
    所以如果你传窗口句柄进去,再用 sendmessage 来操作,起码发生错误不会崩溃,你所要做的就是判断返回值list就是stl 的链表么,里面装的信息类。不是窗口链表
      

  6.   

    6楼的意思,是让你自己在发生错误的时候,从发生错误的地方开始一直往回查错误原因
    而不是让你把错误发出来让我们来给你找原因,而且你所发来的错误根本就不能明确知道错误信息在独立线程里面,不要直接操作窗口类,最好是传窗口句柄来让线程操作
    不然在销毁窗口的时候,有可能在主线程里面这个类已经释放,但是线程里面还不能发现这个类已经销毁再有就是你说的这个 list,是一个链表?还是一个列表窗口?如果是链表,就用临界锁或者类似功能的东西来做如果是列表窗口,也可以用临界锁或者类似的东西来做,还有就是你程序崩溃,是发生在删除 list 成员时发生,那肯定是访问到了无效序号而引发的问题了。这情况一般发生在操作窗口类的情况
    所以如果你传窗口句柄进去,再用 sendmessage 来操作,起码发生错误不会崩溃,你所要做的就是判断返回值
    传窗口句柄进去,再用 sendmessage 来操作,起码发生错误不会崩溃?为什么这么说?
      

  7.   

    明显是 一边在查看list, 另一边却要clear list, 导致iterator错了,进而引发崩溃。
    前面版主说的很明白了,在操作list相关时,先lock,之后unlock
      

  8.   

    定义一个全局CCriticalSection g_lock;线程函数
    g_lock.Lock();
    查看list
    g_lock.UnLock();清除list时
    g_lock.Lock();
    lst.clear();
    g_lock.UnLock();