WINDOWS线程处理过程中的疑问

来源:百度知道 编辑:UC知道 时间:2024/06/15 10:48:52
WINDOWS操作系统,在一个进程的某个函数中抛出一个线程,如果该函数返回了(但是整个进程还没有退出),那么由这个函数抛出的线程是否仍能正常执行?
如果在该函数内定义的某个变量将地址传给了这个线程,那么函数退出后线程内的这个地址是否还可以正常访问?
那么请问,该如何在函数中给线程传递参数才能保证以下要求:
1、每个线程的参数内容肯定是不一样的
2、创建线程的子函数退出后该参数仍然可用

我在程序中使用new后编译提示new没有定义,我已经包含进了<NEW.h>头文件,仍然是未定义,编译环境是VC(语言是标准C),是否有什么特殊的头文件?或者有什么LIB文件需要包含进来的?

还有这个NEW是不是C++中的?如果是标准C应该如何给线程传递参数?

"抛出"一个线程?是否指“创建”一个线程?!
1。仍能正常执行,因为被创建的线程属于创建函数所在的进程(该线程的父进程),与所属父进程的生命周期相关联。
2。函数推出后,局部变量无效,全局变量或者堆上分配的变量可以访问

针对补充:
1.创建线程的API可以传入初始参数,根据被创建线程的特征(由程序开发者制定)传入不同的初始参数;
2.采用堆分配内存,但是要注意双方“分配与释放”的责任归属,例如:
void subFunc(char* p){//由调用者传入返回内容的句柄
p = new char(10);//由函数分配内存作为返回数据区,new分配在函数退出后不释放,必须由程序显式调用delete p;来释放
...//给该存储区写入要返回的内容
}
调用者使用完毕后应该释放,否则内存泄漏
char *p = 0;
subFunc(p);
if(p) delete p;

关于new:
不需要包含头文件,是c++的操作符,专门用于堆中分配内存,功能相当于c中的malloc
char * p = new char(2);

当然可以正常运行,在进程里面看不到不代表其进程函数不在,就像系统里面的SVCHOST一样,他是多个参数或者其他程序的调用的结果。
是可以正常访问的! 就像98下的KENDLL32。DLL一样!他时时在进程中不在运行,但是一旦有用户或者其他程序给它付值它就运行了! “KENDLL32。DLL -USER”用户给它值让他关机或者重新启动!

眼好累...