MFC中如何在一个按钮中循环一个事件,在点击另一按钮时结束这个事件?

MFC中如何在一个按钮中循环一个事件,在点击另一按钮时结束这个事件?,第1张

给你个简单的小例子吧实现你的功能。

1、建立一个MFC工程,上面放2个按钮:第一个按钮是启动循环;第二个按钮是结束循环

2、步骤:

// CreateThreadexDlg.cpp : 实现文件

//

#include "stdafx.h"

#include "CreateThreadex.h"

#include "CreateThreadexDlg.h"

#include "afxdialogex.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

bool bInLoop = true//------------>定义一个全局变量用于控制循环

// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialogEx

{

public:

 CAboutDlg()

...

②在第一个按钮(启动循环)事件里面加入如下代码:

//单击此按钮启动一个线程用于实现循环

void CCreateThreadexDlg::OnBnClickedButton1()

{

 // TODO: 在此添加控件通知处理程序代码

 CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)startlop,NULL,0,0)

}

③在第一个按钮上面定义一个线程函,此函数用于当满足条件实现死循环,不满足条件跳出循环从而关闭线程

LPTHREAD_START_ROUTINE startlop(void*)

{

 while (bInLoop)//逻辑条件

 {

  MessageBoxW(NULL,L"hello",L"test",MB_OK)

  Sleep(2000)

 }

 return 0

}

3、关闭循环,点击此按钮将全局变量赋予假,则结束循环

void CCreateThreadexDlg::OnBnClickedButton2()

{

 // TODO: 在此添加控件通知处理程序代码

bInLoop=false

}

很简单的一个线程例子,当然方法众多,希望对初学的你有帮助,请采纳,谢谢

这种情况可能只能单独写一个程序来调用这个函数,函数所需要的参数等信息通过进程间通信或者文件的手段来传递,由主程序启动子进程来调用这个函数,这样在执行一段时间之后可以用TerminateProcess来终止这个函数的执行。不过如果这个函数有创建一些全局资源,临时文件之类,可能需要你手工清理。

如果使用单独线程来执行这个函数,并且用TerminateThread来终止函数的执行,可能会造成严重的内存泄漏


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8090342.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存