Lines lin;
应该定义为全局变量(放到函数体外)。
你可以做一个试验,在AfxBeginThread一句后加上Sleep(9000);就可以看到结果了,不过这样是及其危险的操作。

解决方案 »

  1.   

    I think you should declare the parameter like this:static Lines lin;
      

  2.   

    你从哪一点看出“发现参数根本就没有传递到线程函数中去”?if(lines(lin->dfile,lin->ofile,lin->ns,lin->type))
    这句是什么意思?你好像没有重载构造函数吧?
      

  3.   

    作为局部变量传进来是没有问题的,反而作为全局变量的话才会有问题,
    比如当创建2个同样的线程时就会造成对全局变量的使用冲突。其实解决方法是要从线程入手,由于线程直接引用了传入参数,所以这个
    线程从某种意义上开说并不是一个能够并行的线程。
    可以将Lines *lin=(Lines*)pParam;
    改成
    Lines lin;
    memcpy(&lin, (Lines*)pParam, sizeof (Lines));
    这样才是安全的,因为在线程中谁都不知道传入的参数指针是否永久合法。
      

  4.   

    可以用三种方法实现,一种是把lin定义成全局变量(可以是参数传递,也可以在目的代码中直接使用),2:是把lin定义成静态变量(但要注意在使用此变量时需要加上变量定义而非参数传递),3:把lin定义成指针,使用new来分配内存,但在对方使用完后,需要及时使用delete来释放资源。
      

  5.   

    作为局部变量是有问题的,主线程创建线程后继续执行,该局部变量随之因出了作用域而无效。如上面所说,静态变量和全局变量都会造成重入的问题,当然(如果保证该线程只有一个,未免不是一种简便的解决办法),要不用new,最合法的用法。不过记得在找个时候delete哦:)