有两个Thread,A和B.A负责当变量i为偶数的时候把i++,
B除了负责当变量为奇数的时候把i++之外,它还有其他事情要处理。现在的问题,在于当A把i变为偶数的时候,怎么通知B它已经完成了对i的操作,B可以操作它了。
如果用信号量,那么B必须等待这个信号量,那么B就会在信号量这个地方阻塞,影响了其他事情的处理,
如果用SendMessage(),那么这两个进程根本就没有界面,就不不用说窗口的handle,所以不知道应该怎么处理。
B除了负责当变量为奇数的时候把i++之外,它还有其他事情要处理。现在的问题,在于当A把i变为偶数的时候,怎么通知B它已经完成了对i的操作,B可以操作它了。
如果用信号量,那么B必须等待这个信号量,那么B就会在信号量这个地方阻塞,影响了其他事情的处理,
如果用SendMessage(),那么这两个进程根本就没有界面,就不不用说窗口的handle,所以不知道应该怎么处理。
或者在B中建一个消息循环(反正B中一定有个循环,否则上面的方法就无法奏效),在A中用PostThreadMessage通知。
或者用一个全局变量(这里就可以是i),用临界区保护对它的访问,在B中的循环每次判断一下i是否为奇数,以决定是否++i。
HANDLE hEvent;
unsigned ThreadBid;
int i = 0;
unsigned _stdcall DoitB(void * )
{while (i<100)
{if( 0 != i%2 )
{
i++;
SetEvent(hEvent);
printf("the %d thread\n",i);
};
}
return 0;
};
void main()
{
hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);hThreadB = (HANDLE) _beginthreadex(NULL,
NULL,
&DoitB,
&i,
NULL,
&ThreadBid);WaitForSingleObject(hThreadB,5); //时间按需求设置while (i<100)
{ if (0 == i%2)
{
i++;
printf("%d\n",i);
}
WaitForSingleObject(hEvent,5);
printf("do another job\n");
}
// {};CloseHandle(hThreadB);}
HANDLE hEvent;
unsigned ThreadBid;
int i = 0;
unsigned _stdcall DoitB(void * )
{while (i<100)
{if( 0 != i%2 )
{
i++;
SetEvent(hEvent);
printf("the %d thread\n",i);
};
}
return 0;
};
void main()
{
hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);hThreadB = (HANDLE) _beginthreadex(NULL,
NULL,
&DoitB,
&i,
NULL,
&ThreadBid);while (i<100)
{ if (0 == i%2)
{
i++;
printf("%d\n",i);
}
WaitForSingleObject(hEvent,5);
printf("do another job\n");
}
// {};CloseHandle(hThreadB);}