控制台实现进度条

来源:互联网 发布:dm500刷机软件 编辑:程序博客网 时间:2024/06/08 08:54




#include "stdio.h"#include <windows.h>#include <process.h>int g_iCnt = 0;int l_iSum = 10000;HANDLE hSemaphore;void vDisplayProBar(int p_iNumBarCh, int p_iCompletedValue, int p_iSumValue);unsigned int _stdcall ThreadFun(void *pPM);int main(){DWORD l_dwStartTime = 0;DWORD l_dwEndTime = 0;hSemaphore = CreateSemaphore(NULL, 0, 1, NULL);HANDLE handle = (HANDLE)_beginthreadex(NULL, 0, ThreadFun, 0, 0, NULL);Sleep(1000);g_iCnt = 0;l_dwStartTime = GetTickCount();while(g_iCnt<l_iSum){g_iCnt++;Sleep(1);l_dwEndTime = GetTickCount();if((l_dwEndTime-l_dwStartTime)>100 || g_iCnt>=l_iSum){l_dwStartTime = l_dwEndTime;ReleaseSemaphore(hSemaphore, 1, NULL);}}Sleep(100);printf("\n%d\n", g_iCnt);CloseHandle(hSemaphore);return 0;}void vDisplayProBar(int p_iSumBarCh, int p_iCompletedValue, int p_iSumValue){char l_acStr[20] = "";int i = 0;static int l_iLastNumBarChToDis = 0;int l_iNumBarChToDis = (int)(((float)p_iCompletedValue)/((float)p_iSumValue)*p_iSumBarCh);for(i=0; i<p_iSumBarCh-l_iLastNumBarChToDis; i++){printf("\b");}for(i=0; i<p_iSumBarCh-l_iLastNumBarChToDis; i++){if(i <= (l_iNumBarChToDis-l_iLastNumBarChToDis)){printf(">");}else{printf("=");}}_snprintf(l_acStr, sizeof(l_acStr), "    %.2f%%", ((float)p_iCompletedValue/(float)p_iSumValue)*100);printf("%s", l_acStr);for(i=0; i<strlen(l_acStr); i++){printf("\b");}l_iLastNumBarChToDis = l_iNumBarChToDis;}unsigned int _stdcall ThreadFun(void *pPM){while(g_iCnt<=l_iSum){WaitForSingleObject(hSemaphore, INFINITE);vDisplayProBar(50, g_iCnt, l_iSum);}return 0;}


参考链接:

http://blog.csdn.net/morewindows/article/details/6742078









0 0
原创粉丝点击