heblhc 发表于 2017-3-6 09:10:57

关于GetStdHandle()问题求教

本人新手,刚写了一个倒计时小程序,有点不明白的事,求大神指教。
执行GetStdHandle()获取了hOutput 句柄之后,必须得关闭吗?为什么在最后关闭时,系统会闪过“句柄无效”?多谢啦!
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<windows.h>


int Pos(HANDLE hOutput,int time_end)//设置光标位置
{
      CONSOLE_SCREEN_BUFFER_INFO bInfo; // 窗口缓冲区信息
      int i = 0;
      if (time_end<0)
      {
                return -1;
      }
      printf("距离程序结束还有:");
      GetConsoleScreenBufferInfo(hOutput, &bInfo);
      for (i = time_end; i > 0; i--)
      {
                SetConsoleCursorPosition(hOutput, bInfo.dwCursorPosition);
                printf("%2ds", i);
                Sleep(1000);
      }
      SetConsoleCursorPosition(hOutput, bInfo.dwCursorPosition);
      printf("程序结束!");
      return 0;
}

int main()
{
      HANDLE hOutput;
      char *title = "倒计时小程序";
      int color = 11;
      SetConsoleTitle(title);
      hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
      SetConsoleTextAttribute(hOutput, color);
      
      Pos(hOutput,10);
      printf("\n");
      CloseHandle(hOutput);//?
      system("pause");
      return 0;
}

lumber2388779 发表于 2017-3-6 09:34:29

CloseHandle我没记错的话这个主要在线程中才会使用
获取界面的句柄是不需要用到CloseHandle的
你担心内存泄露 你可以最后加上hOutput =NULL
个人比较喜欢用HWND这个类型或者CWND去控制控件

康小泡 发表于 2017-3-7 15:37:44

系统在关闭程序的时候,自己会关闭句柄。句柄不关闭问题不是特别大,但是如果多个线程对一个句柄进行访问,就会出现访问竞争的问题。

heblhc 发表于 2017-3-11 22:26:26

谢谢啦,我还没学到多线程,只是在这里用到了句柄。多谢指教
页: [1]
查看完整版本: 关于GetStdHandle()问题求教