完成端口中,取得完成通知的线程中,一般的处理过程是这样的!DWORD WINAPI ThreadName(LPVOID lParam)
{
HANDLE hCompletion=(HANDLE)lParam;
DWORD dwTrans=0;
PPER_HANDLE_DATA pPer_Handle_Data=NULL;
PPER_IO_DATA pPer_IO_Data=NULL;
//这里定义一个变量
int ival=10;
while (TRUE)
{
int bOk=GetQueuedCompletionStatus(hCompletion,&dwTrans,(LPDWORD)&pPer_Handle_Data,(LPOVERLAPPED*)&pPer_IO_Data,INFINITE);
......
switch(...)
case 1:
//可以肯定的是case1执行过后, case2才执行
//case1中修改ival的值
ival=9;
....
break; case 2:
//输出ival的值
cout<<ival<<endl;
.....
break;
}}问题是,当在case1中修改了ival的值(case1执行过后,case2才执行,第一次GetQueuedCompletionStatus的结果去执行case1,第二次GetQueuedCompletionStatus去执行case2),但是在case2中,ival的值又变成了10.不知道这个是什么原因?!
{
HANDLE hCompletion=(HANDLE)lParam;
DWORD dwTrans=0;
PPER_HANDLE_DATA pPer_Handle_Data=NULL;
PPER_IO_DATA pPer_IO_Data=NULL;
//这里定义一个变量
int ival=10;
while (TRUE)
{
int bOk=GetQueuedCompletionStatus(hCompletion,&dwTrans,(LPDWORD)&pPer_Handle_Data,(LPOVERLAPPED*)&pPer_IO_Data,INFINITE);
......
switch(...)
case 1:
//可以肯定的是case1执行过后, case2才执行
//case1中修改ival的值
ival=9;
....
break; case 2:
//输出ival的值
cout<<ival<<endl;
.....
break;
}}问题是,当在case1中修改了ival的值(case1执行过后,case2才执行,第一次GetQueuedCompletionStatus的结果去执行case1,第二次GetQueuedCompletionStatus去执行case2),但是在case2中,ival的值又变成了10.不知道这个是什么原因?!
int ival=10;