|
- 原型程序如下:
- typedef struct list
- {
- char * data;
- struct list * next;
- } LIST;
- LIST lst; // 已经有一个存在的全局链表了
- main()
- {
- ......
- a();
- ......
- return;
- }
- // 由于a是提供给用户的接口,所以不能对a进行修改
- void * a()
- {
- return get_data(lst);
- }
- void * get_data(LIST * lplst)
- {
- LIST *p;
- if(!lplst) return NULL;
- p = lplst;
- while(p->next)
- {
- int pid;
- if((pid=fork())==0)
- {
- return (void*)p->data;
- }
- else if (pid>0)
- {
- int e, status;
- for(;;)
- {
- e = waitpid(pid,&status,WNOHANG);
- if(e<0)
- {
- e = waitpid(pid,&status,WNOHANG);
- break;
- }
- usleep(500);
- }
- }
- p=p->next;
- }
- }
复制代码
按我的理解,这段程序实际上实现了“一次调用多次返回”这样类似的功能,在main中调用一次a,如果链表中有多个元素,就会有多个返回,而每一个返回,程序都会继续a();语句后面的程序。
而在windows下,似乎没有办法实现类似的功能?通过windows线程,好像不可能做到a()调用完成后对列表里的每个元素,执行a()调用之后的语句。 |
|