#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