
给你个简单的小例子吧实现你的功能。
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来终止函数的执行,可能会造成严重的内存泄漏
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)