在一个线程中启动一个新的线程,并且将原来线程中的某些参数传到新的线程中,传过来之后,发现除了int、long型的参数值传递准确,char型的出现乱码,不知什么原因?
我的新线程是向数据库里面填加新的记录,不知什么原因,添加不上,我调试的时候发现填加记录的语句根本不执行!!请高手指教!!能否详述一下线程之间的参数传递和线程之间的相互启动?

解决方案 »

  1.   

    你最好用消息机制SendMessage()或PostMessage()传递!
    这样传递是用强制转换就可以了!没有问题!我就是这样的!
      

  2.   

    如果每次要传递的数据较多,可以设置全局的struct,然后PostMessage()
    or SendMessage(), 但要注意synchronization
      

  3.   

    flyjalor,我传递的参数是类的数据成员,用sendmessage怎么传递?我是直接在开启新的线成的时候,将参数传给pParam时发现传过来的类的CString型的数据成员出现问题的!!
      

  4.   

    不会就这样让我结贴吧?难道就没有人遇到过我这样的问题?
    up
    up
      

  5.   

    packetdata *packetsdata;
    packetsdata=new packetdata;
    packetsdata->ip_source="202.194.196.116";
    packetsdata->ip_destination="202.194.196.116";
    packetsdata->packet_length=1000;
    packetsdata->packet_type="tcp";
    packetsdata->port_destination=80;
    packetsdata->port_source=80;
    dataindbthr=::AfxBeginThread(DataInDBProc,packetsdata,THREAD_PRIORITY_NORMAL);
      

  6.   

    呵呵,赋值错了。
    应该
    packetsdata->ip_source="202.194.196.116";
    packetsdata->ip_destination="202.194.196.116";
    packetsdata->packet_type="tcp";
    改成
    strcpy();
    因为这不是 CString,而是 char* !!!
      

  7.   

    strcpy(packetsdata->ip_source,"202.194.196.116");
    strcpy(packetsdata->ip_destination,"202.194.196.116");
    strcpy(packetsdata->packet_type,"tcp");
      

  8.   

    但是程序运行时并为报错!iicup(双杯献酒),请留下你的qq,希望可以向你请教!
      

  9.   

    我公司不让上QQ,
    说是不安全。 ;(
    您可以给我发Email [email protected]
      

  10.   

    我的email [email protected]很高兴认识你,明天再向您请教!!
      

  11.   

    请看下面这段代码:
    UINT DataInDBProc(LPVOID pParam)
    {
             packetdata *packetsin;
    CPacketContent *packetcontent;
    packetsin=new packetdata;
    packetsin=(packetdata *)pParam;
    if (pParam==NULL)
    {
    return -1;
    }
    packetcontent=new CPacketContent; if (!(packetcontent->IsOpen()))
    packetcontent->Open(); if (!(packetcontent->IsEOF()))
    packetcontent->MoveLast(); packetcontent->AddNew();
             packetcontent->m_ip_source=packetsin->ip_source;

    packetcontent->m_ip_destination=packetsin->ip_destination;
    packetcontent->m_packet_length=100;//packetsin->packet_length;
    packetcontent->m_packet_type=packetsin->packet_type;
    packetcontent->m_port_destination=packetsin->port_destination0;
    packetcontent->m_port_source=23;//packetsin->port_source;
    packetcontent->Update(); packetcontent->Close();
    delete packetcontent;
    delete packetsin;
             return 0;}
    不知什么原因,调试的时候发现程序执行到open,接着就回到packetsin=(packetdata *)pParam;语句循环执行,为何???
      

  12.   

    这个地方内存泄漏
    packetsin=new packetdata;
    packetsin=(packetdata *)pParam;如果有多个同样的线程在运行,跟踪的时候可能进入另外一个线程。你可以在debug/thread菜单切换到需要跟踪的线程。
      

  13.   

    应该在生成这个线程的线程中,packetsin=new packetdata,然后把packetssin传到pParam中,去掉DataInDBProc的packetsin=new packetdata这句就可以。
      

  14.   

    在父线程中,我已经把参数传递到pParam中了,只不过在子线程中,还需要有一个接收参数的packetdata型的对象,该对象就是packetin
      

  15.   

    还有,那个packetcontent是crecordset类
      

  16.   

    这样就行,子线程中不需要再new了,而且父线程必须用new生成指针。