定义了一个结构类型的全局变量
struct PARAMS{
CString dirname;
CString filename;
} *PPARAMS
PARAMS param1;
把它作为参数传给线程函数AfxBeginThread(myThreadFunc,¶m1,THREAD_PRIORITY_NORMAL,0,0,NULL),
线程函数如下:
UINT myThreadFunc(LPVOID lparam)
{ PPARAMS pparam;
pparam = (PPARAMS)lparam;
...
return 0;
}
创建线程函数需要多次调用,它完成将传过来的结构里面的变量写入一个文件内。
但是有可能多次调用的过程中,全局变量已经被改变,而线程传递参数,传递的是指针,也就是一个地址, pparam = (PPARAMS)lparam;也是让pparam指向全局变量的地址,所以,我的日志里面有的时候有写错 的地方,怎么样把变量而不是变量的地址传给线程函数呢。
在线程函数里面用
pparam->dirname = lparam->dirname;这样分别赋值可以么。
struct PARAMS{
CString dirname;
CString filename;
} *PPARAMS
PARAMS param1;
把它作为参数传给线程函数AfxBeginThread(myThreadFunc,¶m1,THREAD_PRIORITY_NORMAL,0,0,NULL),
线程函数如下:
UINT myThreadFunc(LPVOID lparam)
{ PPARAMS pparam;
pparam = (PPARAMS)lparam;
...
return 0;
}
创建线程函数需要多次调用,它完成将传过来的结构里面的变量写入一个文件内。
但是有可能多次调用的过程中,全局变量已经被改变,而线程传递参数,传递的是指针,也就是一个地址, pparam = (PPARAMS)lparam;也是让pparam指向全局变量的地址,所以,我的日志里面有的时候有写错 的地方,怎么样把变量而不是变量的地址传给线程函数呢。
在线程函数里面用
pparam->dirname = lparam->dirname;这样分别赋值可以么。
线程函数只能用pvoid类型的参数啊
不行,首先你必须对pparam指针赋值才行。
2.线程函数参数LPVOID lparam是一个指针类型,即能传递四个字节的信息。一般情况下使用这四个字节作为指针变量来传递。当然你可以通过参数直接传递一个整数值,而不是用指针。
3.传递字符串,必须使用字符串指针,然后通过字符串指针获取字符串。不然线程参数四个字节也装不下你的字符串啊。
1.不行的话,我要怎样给pparam 赋(初?)值,用什么函数;编译的时候也说这个变量没有初始化,我不记得指针怎样初始化了,new?
2.用lptstr做线程函数的参数么,那么我在线程函数里面用getdata函数取字符串的值?还是要定义char[]来进行赋值取出来。
3.我觉得你说的有理
因为它会不断变化的,所以传给线程,在线程执行过程中,还没有用呢,可能值就已经变了,所以我要传值,不想传指针。
全局变量必须不时的改变,线程函数也必须用变之前的值,所以我要传值,不能只传指针。
我在线程里面赋值传过来的参数指向的地址里面的值
PARAMS param1,传入线程的参数,对结构里的变量分别赋值就行了
2.在线程函数中直接将lparam赋值给lptstr就可以了。 lptstr = (LPSTR)lparam;
CString dirname;
CString filename;
};
typedef struct PARAMS CPARAMS//先用 CPARAMS New 一个变量 tmpParam
全局的CPARAMS的Lock()
//拷贝 全局的CPARAMS 到 tmpParam
全局的CPARAMS的UnLock()然后 tmpParam 传给线程进行
AfxBeginThread(myThreadFunc,&tmpParam,THREAD_PRIORITY_NORMAL,0,0,NULL);线程里面不知道你怎么实现的给不了意见。
太复杂了,我怕我又会出错。
to蚊子:
我的线程就是随便启动的,然后线程函数里面return 0;这个是不是相当于 _endthread();自己销毁自己。
我就用线程里面new下试试,传过来的是地址,但是我可以通过地址复制一份值过来。
1.我在线程里面用pparam->dirname = lparam->dirname,获取参数指向地址里面的值时,它编译时说我pparam没有初始化,所以我问是不是应该先new下pparam;
2.你说线程定义是?
UINT myThreadFunc(LPVOID lparam)
{ //PPARAMS pparam;
CString pparam
pparam = (LPSTR)lparam;
...
return 0;
}