请大家看一下这段线程代码,为什么参数传递不对呢 Lines lin;应该定义为全局变量(放到函数体外)。你可以做一个试验,在AfxBeginThread一句后加上Sleep(9000);就可以看到结果了,不过这样是及其危险的操作。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 I think you should declare the parameter like this:static Lines lin; 你从哪一点看出“发现参数根本就没有传递到线程函数中去”?if(lines(lin->dfile,lin->ofile,lin->ns,lin->type))这句是什么意思?你好像没有重载构造函数吧? 作为局部变量传进来是没有问题的,反而作为全局变量的话才会有问题,比如当创建2个同样的线程时就会造成对全局变量的使用冲突。其实解决方法是要从线程入手,由于线程直接引用了传入参数,所以这个线程从某种意义上开说并不是一个能够并行的线程。可以将Lines *lin=(Lines*)pParam;改成Lines lin;memcpy(&lin, (Lines*)pParam, sizeof (Lines));这样才是安全的,因为在线程中谁都不知道传入的参数指针是否永久合法。 可以用三种方法实现,一种是把lin定义成全局变量(可以是参数传递,也可以在目的代码中直接使用),2:是把lin定义成静态变量(但要注意在使用此变量时需要加上变量定义而非参数传递),3:把lin定义成指针,使用new来分配内存,但在对方使用完后,需要及时使用delete来释放资源。 作为局部变量是有问题的,主线程创建线程后继续执行,该局部变量随之因出了作用域而无效。如上面所说,静态变量和全局变量都会造成重入的问题,当然(如果保证该线程只有一个,未免不是一种简便的解决办法),要不用new,最合法的用法。不过记得在找个时候delete哦:) 多连接状态下如何区分数据来之哪个链接? 关于我自己写的一个台球游戏的类CBall的问题!!很严重很严重,我为这个付出了2个通宵了!!!! 如何拦截控件的键入 大家来谈谈自己的看法 ##关于edit的焦点问题 谁用过Windows自带的柯达图像编辑控件?? 在list control实现文件排列 请问如何实现以下问题 在WINDOWS编程中 开发了一个com组件,用c++再去调用释放的时候的崩溃到_Free处 这个问题好多人都问了(我搜索过了),为什么没人回答(其实很简单的)? 从VB转向VC,请教简单问题。
这句是什么意思?你好像没有重载构造函数吧?
比如当创建2个同样的线程时就会造成对全局变量的使用冲突。其实解决方法是要从线程入手,由于线程直接引用了传入参数,所以这个
线程从某种意义上开说并不是一个能够并行的线程。
可以将Lines *lin=(Lines*)pParam;
改成
Lines lin;
memcpy(&lin, (Lines*)pParam, sizeof (Lines));
这样才是安全的,因为在线程中谁都不知道传入的参数指针是否永久合法。