完成端口中变量的定义问题

wenhong609 2013-05-02 10:07:04
完成端口中,取得完成通知的线程中,一般的处理过程是这样的!

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.不知道这个是什么原因?!
...全文
125 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenhong609 2013-05-02
  • 打赏
  • 举报
回复
引用 3 楼 yang330776 的回复:
ival是全局变量。回顾下全局变量的作用域和生命周期,还有值传递和应用传递,就会全部明白了
ival不是全局变量啊,而且在while()是个死循环,改变了ival的值,在其他的case中应该也是改变后的值啊!
yang330776 2013-05-02
  • 打赏
  • 举报
回复
ival是全局变量。回顾下全局变量的作用域和生命周期,还有值传递和应用传递,就会全部明白了
wenhong609 2013-05-02
  • 打赏
  • 举报
回复
引用 1 楼 doctorwing 的回复:
//这里定义一个变量
        int ival=10;
什么意思!!!
我才是心翼 2013-05-02
  • 打赏
  • 举报
回复
//这里定义一个变量
        int ival=10;

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧