给题主一个简单的进度条程序吧~
成都创新互联主营江城网站建设的网络公司,主营网站建设方案,重庆App定制开发,江城h5重庆小程序开发搭建,江城网站营销推广欢迎江城等地区企业咨询
#include stdio.h
#include stdlib.h
#include conio.h
#include windows.h
#define LEN 10 /*进度条长度*/
int main(void) {
float p; /*进度条刻度*/
float progLen; /*程序总耗时*/
int i, j;
progLen = 15.0;
for (i=1; i=progLen; i++) {
system ("cls");
p = (i/progLen)*LEN; /*计算程序当前进度之于进度条的比例*/
for (j=1; j=(int)(p+0.5); j++) /*打印已执行刻度*/
printf ("■");
for (j=1; j=LEN-(int)(p+0.5); j++) /*打印待执行刻度*/
printf ("□");
printf (" %.1f%%", (i/progLen)*100); /*计算程序当前进度的百分比*/
Sleep(150);
}
putchar ('\n');
getch ();
return 0;
}
运行结果
在C#中设置了2个函数,用于委托映射到c++回调函数控制进度条
static void progress_init(int max)
{
pro_form = new ProgressForm();
pro_form.Show();
pro_form.progressBar1.Minimum = 0;
pro_form.progressBar1.Maximum = max;
//ProgressBar progress = new ProgressBar();
//progress.Parent = this;
// progress.
// progress.Show();
}
static void setValue(int value)
{
pro_form.progressBar1.Step = 1;
pro_form.progressBar1.PerformStep();
if (pro_form.progressBar1.Value == pro_form.progressBar1.Maximum)
pro_form.Dispose();
}
然后在C++中,回调
progress_init(max)
for(int i=0;imax;i++)
{
set_value();
}
程序直接执行会出现问题,突然崩溃,但是在调试执行时没有问题,实在无法理解!
callback Function
回调函数是应用程序提供给Windows系统DLL或其它DLL调用的函数,一般用于截获消息、获取系统信息或处理异步事件。应用程序把回调函数的地址指针告诉DLL,而DLL在适当的时候会调用该函数。回调函数必须遵守事先规定好的参数格式和传递方式,否则DLL一调用它就会引起程序或系统的崩溃。通常情况下,回调函数采用标准WindowsAPI的调用方式,即__stdcall,当然,DLL编制者可以自己定义调用方式,但客户程序也必须遵守相同的规定。在__stdcall方式下,函数的参数按从右到左的顺序压入堆栈,除了明确指明是指针或引用外,参数都按值传递,函数返回之前自己负责把参数从堆栈中弹出。
理解回调函数!
程序在调用一个函数(function)时(通常指api).相当于程序(program)呼叫(Call)了一个函数(function)关系表示如下:
call(调用)
program --------------------→ dll
程序在调用一个函数时,将自己的函数的地址作为参数传递给程序调用的函数时(那么这个自己的函数称回调函数).需要回调函数的 DLL 函数往往是一些必须重复执行某些操作的函数.关系表示如下:
call(调用)
program --------------------→ dll
↑ ¦
¦_______________________________¦
callback(回调)
当你调用的函数在传递返回值给回调函数时,你就可以利用回调函数来处理或完成一定的操作。至于如何定义自己的回调函数,跟具体使用的API函数有关,很多不同类别的回调函数有各种各样的参数,有关这些参数的描述一般在帮助中有说明回调函数的参数和返回值等.其实简单说回调函数就是你所写的函数满足一定条件后,被DLL调用!
也有这样的说法(比较容易理解):
回调函数就好像是一个中断处理函数,系统在符合你设定的条件时自动调用。为此,你需要做三件事:
1. 声明;
2. 定义;
3. 设置触发条件,就是在你的函数中把你的回调函数名称转化为地址作为一个参数,以便于DLL调用。