在VC的窗口上有一个Button,每次点击Button会执行下面语句:HANDLE h_thread1,h_thread2;
BOOL exit1 = FALSE;
Button1_Click()
{
h_thread1=CreateThread(NULL,0, Thread1, NULL,0,NULL);
}
Button2_Click()
{
exit1 = TRUE;
}
static DWORD Thread1(LPVOID pParam)
{
if(h_thread2)
closehandle(h_thread2);
h_thread2=CreateThread(NULL,0,Thread2,NULL,0,0);/*创建第二个线程*/
while(true)
{
if (exit1)
break;
do_some();
}
}
static DWORD Thread2(LPVOID pParam)
{
while(true)
{
socket accept(); /*这里是一个socket的阻塞*/
}
}1.每次会先单击Button1,再单击Button2,让Thread1退出,但这样Thread2没有退出,会有什么后果吗?
2. thread1退出了,是不是thread2也会自动的退出?
3. 我在thread1里每次进入,都会先查h_thread2是否存在,如果存在则closeHandle(),这样其它没有真正关闭thread2吧/
在线等待,上面线程在多次点击Button1,Button2后有什么后果可以保证单击Button1后一定要单击Button2才能继续单击Button1. 可以保证是一一对应的。
BOOL exit1 = FALSE;
Button1_Click()
{
h_thread1=CreateThread(NULL,0, Thread1, NULL,0,NULL);
}
Button2_Click()
{
exit1 = TRUE;
}
static DWORD Thread1(LPVOID pParam)
{
if(h_thread2)
closehandle(h_thread2);
h_thread2=CreateThread(NULL,0,Thread2,NULL,0,0);/*创建第二个线程*/
while(true)
{
if (exit1)
break;
do_some();
}
}
static DWORD Thread2(LPVOID pParam)
{
while(true)
{
socket accept(); /*这里是一个socket的阻塞*/
}
}1.每次会先单击Button1,再单击Button2,让Thread1退出,但这样Thread2没有退出,会有什么后果吗?
2. thread1退出了,是不是thread2也会自动的退出?
3. 我在thread1里每次进入,都会先查h_thread2是否存在,如果存在则closeHandle(),这样其它没有真正关闭thread2吧/
在线等待,上面线程在多次点击Button1,Button2后有什么后果可以保证单击Button1后一定要单击Button2才能继续单击Button1. 可以保证是一一对应的。
Button1_Click()
{
exit = FALSE; /*这里要加上 */
h_thread1=CreateThread(NULL,0, Thread1, NULL,0,NULL);
}
2. 不会,除非你的进程整个结束了
3. 对,并没有关闭thread2,只是减少了一个内核对象计数如果你给出的是伪代码的话还好,如果是真实代码的话问题就很多了