社区
进程/线程/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;
}
问题是我怎么调用自定义函数,并且我的界面不会卡死.
...全文
2129
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播放器
1. **事件处理**:
MFC
的ON_MESSAGE、ON_COMMAND等宏用于注册消息处理函数,当用户点击播放按钮时,会触发相应的事件,调用播放函数。 2. **
线程
安全**:因为音视频处理通常涉及多
线程
,比如解码和渲染可能在不同的...
MFC
类库详解和新编api参考大全
而Windows API(Application Programming Interface)则是微软操作系统提供的函数库,为开发者提供了操作系统级别的功能调用。
MFC
类库详解:
MFC
的核心在于它封装了Windows API,将底层的API函数转换为易于理解和...
CWebPage类
在Microsoft Visual C++(VC)和
MFC
(Microsoft Foundation Classes)框架中,`CWebPage` 类是一个自定义的类,用于与Web页面交互,尤其是调用JavaScript函数。这个类通常是在开发桌面应用程序时,需要集成Web内容...
MFC
如何使用
线程
函数。
1.新建对话框程序(假如你的工程名叫Child),在public中定义
线程
函数 static UINT Thread1(void *pArg);2.在.cpp中写
线程
函数(你希望它做什么,一般用作循环,你的对话框运行是主
线程
,它是子
线程
,两者互不干扰让...
MFC
线程
(一):简单介绍
比如一段代码调用两个函数 FunOne(); FunTwo(); 只要当函数FunOne中的代码执行完才返回来执行FunTwo.假如逻辑上是有先后顺序那还真只能这样按顺序执行下来.不过有假如FunOne与FunTwo没有逻辑先后顺序,是相互独立...
进程/线程/DLL
15,473
社区成员
49,171
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章