MFC 进入线程后时常会卡住程序,然后报内存泄露

qq_37834095 2018-07-09 08:55:14
一会好好的,没报内存泄露;一会卡住了,退出就报内存泄露。为什么进入线程后容易卡住程序啊,延时也用过了。内存泄露双击的地方说找不到指定文件。
...全文
1880 181 打赏 收藏 转发到动态 举报
写回复
用AI写文章
181 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2018-07-20
  • 打赏
  • 举报
回复
Congratulations !
qq_37834095 2018-07-20
  • 打赏
  • 举报
回复
好了,多谢师傅了,现在循环也不卡了
qq_37834095 2018-07-20
  • 打赏
  • 举报
回复
是的啊,师傅我的点动很早就是好的了。你说把this 换成time1 aparm?
schlafenhamster 2018-07-20
  • 打赏
  • 举报
回复
timef1aparm);
"什么叫点动" 即英文 Jog 意思 是 点一下 (按一下)动一次 。
qq_37834095 2018-07-20
  • 打赏
  • 举报
回复
怎么乱来操作啊,什么叫点动啊,长按就抬起就可以了!我试了啊,也是OK的
qq_37834095 2018-07-20
  • 打赏
  • 举报
回复
UINT timef3 (LPVOID aparm)
{


while(1)
{
timef1(this);//我用别的线程函数,这里报错啊,报只能在非静态成员函数使用,我用指针类也是一样的。

}

}
要怎么弄啊
schlafenhamster 2018-07-20
  • 打赏
  • 举报
回复
你 试试 按下 后 不 Up,接着移动鼠标 , 让鼠标离开 按钮区域 后再 Up , 看看这个 Up 还能不能 接受到 ?
qq_37834095 2018-07-20
  • 打赏
  • 举报
回复
鼠标 离开 按钮区 后再 Up , 我鼠标离开就是抬起啊,就停止了。再来的话,会继续在这里变化的毕竟我没有清零啊
待续_1006 2018-07-20
  • 打赏
  • 举报
回复
学习各位大佬
qq_37834095 2018-07-20
  • 打赏
  • 举报
回复
还早啊,不是还有xyz的没有做吗,这只是其中一小部分。先整整别的了
schlafenhamster 2018-07-19
  • 打赏
  • 举报
回复
定时器 运行 还是 在 主线程 ,要 不 阻塞 得在 另一个 线程。
或者 是 DoEnevnt 。如 jog 的 代码 可以 如下:

//
void DoEvents()
{
MSG msg;
// Process existing messages in the application's message queue.
// When the queue is empty, do clean up and return.
while (::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
{// has msg
if (!AfxGetThread()->PumpMessage()) break;
}
}
//
bool setJogMode(short axis,double fAcc,double fDec)
{
TJogPrm jog;
short rtn = 0;
// 将AXIS轴设为Jog模式
rtn = GT_PrfJog(axis);
if(rtn) return false;
// 读取Jog运动参数
rtn = GT_GetJogPrm(axis,&jog);
if(rtn) return false;
//
jog.acc = fAcc;
jog.dec = fDec;
jog.smooth = 0.0;
// 设置Jog运动参数
rtn = GT_SetJogPrm(axis,&jog);
if(rtn) return false;
//
return true;
}
//
bool DoJogging(short axis,double vel)
{
short rtn = 0;
long sts = 0;
// 设置AXIS轴的目标速度
rtn = GT_SetVel(axis,vel);
if(rtn) return false;
// 启动AXIS轴的运动
rtn = GT_Update(1<<(axis-1));
if(rtn) return false;
do
{
DoEvents();
rtn = GT_GetSts(axis,&sts);
if(rtn) return false;
} while(!(sts & STS_MOTOR_ARRIVE));
//
return true;
}
// X+
void CCoffeeDlg::OnButton8()
{
// TODO: Add your control notification handler code here
if(setJogMode(AXIS_X,0.25,0.25))
{
bool ret=DoJogging(AXIS_X,100.0);
}
}
// X-
void CCoffeeDlg::OnButton9()
{
// TODO: Add your control notification handler code here
if(setJogMode(AXIS_X,0.3,0.3))
{
DoJogging(AXIS_X,-100.0);
}
}

qq_37834095 2018-07-19
  • 打赏
  • 举报
回复
其他都好了,就是循环卡死界面了,程序还是好的
qq_37834095 2018-07-19
  • 打赏
  • 举报
回复
恩 ,发现定时器循环使用的话,界面也是移动不了啊,界面无法自动刷新了,但是程序是可以的啊。怎么让界面不会假死啊
qq_34692210 2018-07-19
  • 打赏
  • 举报
回复
可以试下使用事件代替定时器和Sleep。
schlafenhamster 2018-07-19
  • 打赏
  • 举报
回复
从 你的 代码 看 Gts 并没有 “增量” 点动!
你 试试 按下 后 ,鼠标 离开 按钮区 后再 Up , 看看这个 Up 还能不能 接受到 ?
qq_37834095 2018-07-19
  • 打赏
  • 举报
回复
我长按里面都包括了可加可减! 我把事件放到循环SetTimer下面可是还是没有效果
schlafenhamster 2018-07-19
  • 打赏
  • 举报
回复
PM_NOREMOVE PeekMessage NOREMOVE 消息不 移走 。
AfxGetThread()->PumpMessage() // 执行 消息

"那是长按就会继续增加的"

增 量 点动 ,是 “加速 移动 减速 ” 的 过程 ,
连续点动 是 加速 一直移动(按下) 减速 的 过程。
qq_37834095 2018-07-19
  • 打赏
  • 举报
回复
怎么不让timer1卡死界面这就可以了啊
qq_37834095 2018-07-19
  • 打赏
  • 举报
回复
void DoEvents()
{
MSG msg;
// Process existing messages in the application's message queue.
// When the queue is empty, do clean up and return.
while (::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
{// has msg
if (!AfxGetThread()->PumpMessage()) break;
}
}
这里表示队列消息移除……然后是什么呀,我把timef1放这里可以吗

我用的另外一个事件怎么行不通啊
qq_37834095 2018-07-19
  • 打赏
  • 举报
回复
我的点动是OK的啊!那是长按就会继续增加的!*pDlg指向类啊,我要访问窗口的控件,这样的话要销毁吗?我给控件关联变量了,给他初始化值了,没有报错了
加载更多回复(157)

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧