社区
进程/线程/DLL
帖子详情
MFC,线程调用函数
qq_37834095
2018-06-20 02:34:52
我在想点击开始按钮然后就运行我的一个自定义函数保证界面不卡死。
.h头文件声明 自定义函数:void Denmic(long a long b);
.cpp文件的按钮响应消息里面,创建了一个线程AfxBeginThread(timef,this);
也给出了线程函数
UINT timef (LPVOID aParm)
{
return 0;
}
问题是我怎么调用自定义函数,并且我的界面不会卡死.
...全文
2134
236
打赏
收藏
MFC,线程调用函数
我在想点击开始按钮然后就运行我的一个自定义函数保证界面不卡死。 .h头文件声明 自定义函数:void Denmic(long a long b); .cpp文件的按钮响应消息里面,创建了一个线程AfxBeginThread(timef,this); 也给出了线程函数 UINT timef (LPVOID aParm) { return 0; } 问题是我怎么调用自定义函数,并且我的界面不会卡死.
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
236 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
schlafenhamster
2018-07-07
打赏
举报
回复
for(short i=0;i<p_inx; i++)//这里的i可以累加了
{
if(i==0) 这条语句 只含 下一句
afxDump<<i<<"=i\n"; // if 到这里 结束 !!!
afxDump<<p_inx<<"=p_inx\n";//是这样改的
{ // 这个 大 括号 与 if (i==0)无关 !!!!
long a=Jspace[i].a;
******
}
qq_37834095
2018-07-07
打赏
举报
回复
小弟在此感谢各位师傅、同仁的帮助!谢谢大家!
qq_37834095
2018-07-03
打赏
举报
回复
可以啊,有联系方式吗
qq_37834095
2018-07-03
打赏
举报
回复
这时候else下的光标是一行一行走的
qq_37834095
2018-07-03
打赏
举报
回复
UNIT timmef1(LPVOID aparm)
{
for(short i=0;i<p_inx; i++)//这里的i可以累加了
{
if(i==0)
afxDump<<i<<"=i\n";
afxDump<<p_inx<<"=p_inx\n";
//是这样改的
{
long a=Jspace[i].a;
******
}
else
{
long tm_a,tm_b,tm_c;
}
qq_37834095
2018-07-03
打赏
举报
回复
就是这个情况,我不能带0做参数的呀,几个都是这样
schlafenhamster
2018-07-03
打赏
举报
回复
if(i==0)
afxDump<<i<<"=i\n";// if end !!!!
afxDump<<p_inx<<"=p_inx\n";
{
改
afxDump<<i<<"=i\n";
afxDump<<p_inx<<"=p_inx\n";
if(i==0)
{
qq_37834095
2018-07-03
打赏
举报
回复
光标到else下面就直接跑到return 0;这里了
qq_37834095
2018-07-03
打赏
举报
回复
for(short i=0;i<Pinx;i++)// 共 pinx 个 线程 !!!
{
if(i==0)
{
AfxBeginThread(timef1,this);
}
else
{
AfxBeginThread(timef2,this);
}
}
我一直把Pinx当做次数的!那不用这个方法了!
UNIT timmef1(LPVOID aparm)
{
long tm_a,tm_b,tm_c;
for(short i=0;i<p_inx; i++)//这里的i可以累加了
{
if(i==0)
afxDump<<i<<"=i\n";
afxDump<<p_inx<<"=p_inx\n";
{
long a=Jspace[i].a;
******
*****
Denmic( a ,b,c,tf0);
}
else
{
tm_a=(long)Jspace[i].a-(long)Jspace[i- 1].a;
//这里2个变量值做减法,明明有值的,为什么tm_a=0呢?
tm_b=(long)Jspace[i].a-(long)Jspace[i- 1].b;
tm_c=(long)Jspace[i].a-(long)Jspace[i- 1].c;
Denmic(tm_a,tm_b,tm_c,(long)Jspace[i].c,(long)Jspace[i].l_time);
}
if(g_EndThread) break;
}
return 0;
}
schlafenhamster
2018-07-03
打赏
举报
回复
for(short i=0;i<Pinx;i++)// 共 pinx 个 线程 !!!
{
if(i==0)
{
AfxBeginThread(timef1,this);
}
else
{
AfxBeginThread(timef2,this);
}
}
怎么说不明白 ?
qq_37834095
2018-07-03
打赏
举报
回复
上面肯定用for啊。如果不能用2个线程函数处理,就这样啊
UNIT timmef1(LPVOID aparm)
{
long tm_a,tm_b,tm_c;
for(short i=0;i<p_inx; i++)//这里的i不累加是线程调用的Denmic函数在死循环…………
{
if(i==0)
afxDump<<i<<"=i\n";
afxDump<<p_inx<<"=p_inx\n";
{
Denmic( (long)Jspace[i].a ,(long)Jspace[i].b,(long)Jspace[i].c,(long)Jspace[i].l_time);
}
else
{
tm_a=(long)Jspace[i].a-(long)Jspace[i- 1].a;
tm_b=(long)Jspace[i].a-(long)Jspace[i- 1].b;
tm_c=(long)Jspace[i].a-(long)Jspace[i- 1].c;
Denmic(tm_a,tm_b,tm_c,(long)Jspace[i].c,(long)Jspace[i].l_time);
}
if(g_EndThread) break;
}
return 0;
}
逻辑就是要分2种情况的。
schlafenhamster
2018-07-02
打赏
举报
回复
"就一个线程啊"
if
(short i=0;i<Pinx;i++)
如果是 if ,这句 语法错
如果是 for ,那么 创建了 Pinx 个 线程!
仔细 想想 你 的 程序 逻辑,
qq_37834095
2018-07-02
打赏
举报
回复
恩,就一个线程啊
qq_37834095
2018-07-01
打赏
举报
回复
还有这个方案
void xxDlg::OnButtonStart()//启动按钮
{
if(short i=0;i<Pinx;i++)
//这里的i是全局的
{
if(i==0)
{
AfxBeginThread(timef1,this);
}
else
{
AfxBeginThread(timef2,this);
}
}
}
这样表达可以吗?但是这样的话一直会报内存泄露,用 OnDestory()也没有效果……
qq_37834095
2018-07-01
打赏
举报
回复
把 if (space_x>0&&space_y>0&&space_z>0)
都 注释 掉, 只要 count++ …………这样的话count一直加的和i不匹配啊,这样没意义啊!
UNIT timmef1(LPVOID aparm)
{
long tm_a,tm_b,tm_c;
for(short i=0;i<p_inx; i++)
//这里的i不累加是线程调用的Denmic函数在死循环…………
{
if(i==0)
afxDump<<i<<"=i\n";
afxDump<<p_inx<<"=p_inx\n";
{
Denmic( (long)Jspace[i].a ,(long)Jspace[i].b,(long)Jspace[i].c,(long)Jspace[i].l_time);
}
else
{
tm_a=(long)Jspace[i].a-(long)Jspace[i- 1].a;
tm_b=(long)Jspace[i].a-(long)Jspace[i- 1].b;
tm_c=(long)Jspace[i].a-(long)Jspace[i- 1].c;
Denmic(tm_a,tm_b,tm_c,(long)Jspace[i].c,(long)Jspace[i].l_time);
}
if(g_EndThread) break;
}
return 0;
}
我是想当保存一个数据的时候就调用if(i==0)里面的函数,当保存多个数据的时候就调用else里面的函数啊,并且else里面的数据是做完一次累加一次一直到i等于最大值结束。else里面的函数把参数改下就可以了,如何让count和i匹配起来啊,有什么办法吗
schlafenhamster
2018-07-01
打赏
举报
回复
不 可以, 请 学习 基本 知识 !
else
{
AfxBeginThread(timef2,this);
}
创建了 多少 线程 !
schlafenhamster
2018-06-29
打赏
举报
回复
"while(!g_EndThread)//这里的while一定要有的,这是一个
工作模式
"
应该是
UNIT timmef1(LPVOID aparm)
{
"while(!g_EndThread)
{
。。。。。。。。。。。。。。。。。。
}
吧?
i =0 时 Denmic () 因为 while 而在 Denmic() 内 死循环, 当然 i没法 i++ !
什么叫 “工作模式”??
qq_37834095
2018-06-29
打赏
举报
回复
UNIT timmef1(LPVOID aparm)
{
long tm_a,tm_b,tm_c;
for(short i=0;i<p_inx; i++)//
这里的i为什么不循环累加呢?
{
if(i==0)
afxDump<<i<<"=i\n";
afxDump<<p_inx<<"=p_inx\n";
{
Denmic( (long)Jspace[i].a ,(long)Jspace[i].b,(long)Jspace[i].c,(long)Jspace[i].l_time);
}
else
{
tm_a=(long)Jspace[i].a-(long)Jspace[i- 1].a;
tm_b=(long)Jspace[i].a-(long)Jspace[i- 1].b;
tm_c=(long)Jspace[i].a-(long)Jspace[i- 1].c;
Denmic(tm_a,tm_b,tm_c,(long)Jspace[i].c,(long)Jspace[i].l_time);
}
if(g_EndThread) break;
}
return 0;
}
//----------------------------------------------------------------------
Denmic(long a,long b,long c,long t0)
{
long count =0;
double os[3];tim=0,t0;
double rfos_x,rfos_y,rfos_z;
short space_x,space_y,space_z;
while(!g_EndThread)
//这里的while一定要有的,这是一个工作模式
{
if (space_x>0&&space_y>0&&space_z>0)
{
if(time<t0)
{
T+=6;
os[0]=a*T*T/(t0*t0);
os[1]=b*T*T/(t0*t0);
os[2]=c*T*T/(t0*t0);
for(short i=1;i<=3;i++)
{
te(i,os[3-i]);
}
}
if(time==t0)
{
Stop(a,tf);
Stop(b,tf);
Stop(c,tf);
}
}
else if ((space_x==0)&&(space_y==0)&&(space_z==0))
{
Start(x);
Start(y);
Start(z);
}
count++;
if(g_EndThread) break;//----------------
}
}
void xxDlg::OnButtonStart()//启动按钮
{
AfxBeginThread(timef1,this);
}
schlafenhamster
2018-06-29
打赏
举报
回复
把 if (space_x>0&&space_y>0&&space_z>0)
都 注释 掉, 只要 count++
看 加不加 !
qq_37834095
2018-06-29
打赏
举报
回复
关键是count没有累加
加载更多回复(212)
MFC
+ffmpeg播放器
不要资源分的,只因发帖时无法上传附件,特传至此
CWebPage类
VC/
MFC
中调用javascript函数所需要的类
MFC
如何使用
线程
函数。
1.新建对话框程序(假如你的工程名叫Child),在public中定义
线程
函数 static UINT Thread1(void *pArg);2.在.cpp中写
线程
函数(你希望它做什么,一般用作循环,你的对话框运行是主
线程
,它是子
线程
,两者互不干扰让程序更流畅) UINT CChildDlg::Thread1(void *pArg) { CChildDlg *dlg1=(CChildD
MFC
线程
(一):简单介绍
线程
简介 我们知道一般情况程序中的代码都是按顺序从头开始一行一行的执行以最后.中间不能出现同时执行的情况.比如一段代码调用两个函数 FunOne(); FunTwo(); 只要当函数FunOne中的代码执行完才返回来执行FunTwo.假如逻辑上是有先后顺序那还真只能这样按顺序执行下来.不过有假如FunOne与FunTwo没有逻辑先后顺序,是相互独立的.比如两个函数分别处理两不同的文件one...
在
MFC
中类内部建立
线程
处理函数以便调用类的成员函数和变量
转自:https://blog.csdn.net/xinsuixiaofeiyu/article/details/38641341 在用
MFC
做开发时,有时遇到些工作
线程
中有些状态需要在界面上显示,最直观的就是工作
线程
处理函数的进度显示。这时候我们就需要在
线程
内部调用类的成员函数和变量了。下面给出一种最直观,最简单的一种处理方法。 类中声明
线程
函数: class CAudioREGDl...
进程/线程/DLL
15,467
社区成员
49,171
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章