您的位置:程序门 -> vc/mfc -> 进程/线程/dll



本人属于菜鸟,请教个简单的问题!一个线程结束另外一个线程的问题。


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


本人属于菜鸟,请教个简单的问题!一个线程结束另外一个线程的问题。[已结贴,结贴人:bios8086]
发表于:2007-02-12 10:16:34 楼主
//thread   a
ncontinue   =   1;
cwinthread*   pthread   =   afxbeginthead(threadfunc,&ncontinue);
.
...
....
ncontinue   =   0;   //tell   thread   b   to   terminate

//thread   b
uint   threadfunc   (lpvoid   pparam)
{
  int   *   pcontinue   =(int   *)pparam;
while   (*   pcontinue)
{
    //work   work   work
}
return   0;

}  
我的问题是:线程b如何检查ncontinue,我知道当ncontinue   ==   0   的时候线程结束线程b,那么当ncontinue   ==   0成立的时候,线程b又是怎么样结束的呢?

感觉书上给出的这个例程就像天马行空一样。摸不着边际!
发表于:2007-02-12 13:23:281楼 得分:2
那么当ncontinue   ==   0成立的时候,线程b又是怎么样结束的呢?
=================================================================
当ncontinue   ==   0   成立,则   while   (*   pcontinue)   为假,while循环将不能继续循环,代码继续执行到   return   0;   这时函数返回,线程自然结束!
发表于:2007-02-12 14:40:512楼 得分:0
楼上的回答好像省略了部分逻辑链啊。还是不能给我满意的回答。
线程b是线程a调用afxbeginthread   启动的,afxbeginthead(threadfunc,&ncontinue)
启动时线程b知道的ncontinue值还是1,那么后来当线程a将ncontinue   设置成0的时候,线程b是如何知道的呢?
发表于:2007-02-12 20:10:483楼 得分:2
楼主,你的线程b不是   一个while循环吗,每循环一次都要判断*pcontinue是不是为0,如果为0,当然就退出循环从而结束线程了。除非你的每次while循环里面又有一个死循环,那就没办法了
发表于:2007-02-13 10:51:014楼 得分:2
将线程a中包含ncontinue的窗口指针传给线程b,在循环中去检查.或者用发消息,线程同步什么的.这个就要多一些改动了.
发表于:2007-02-13 12:02:135楼 得分:2
return了不就结束了吗.....
发表于:2007-02-13 15:57:156楼 得分:2
pcontinue   是   ncontinue   的指针,它们代表一个东西!!!所以怎么知道明白了吧?   不明白请查查指针的用法


快速检索

最新资讯
热门点击