怎么在基于对话框的mfc程序中实现多线程?

author author     2023-03-22     383

关键词:

怎么设计基于对话框的多线程程序?比如,基于对话框的MFC程序可以通过按钮来调用函数,现在我想直接开多线程来处理一些数据,并且不影响原有按钮的触发功能,怎么实现?记时器和多线程试例最好,望高手前辈指点! 

参考技术A 1. 因为你是MFC程序,建议使用AfxBeginThread()来创建新线程。AfxBeginThread()的内部会做一些相应的初始化,再调用CreateThread()API。 线程处理函数也就是一个普通的函数,但是其声明形式有规定的,如下:
DWORD WINAPI ThreadProc (LPVOID pParam);
线程函数的名字由你自己定,但是格式必须是什么这个声明形式。比如:
DWORD WINAPI MyThreadFunction (LPVOID pParam)

// 函数体,这里你写你的处理代码。
// 只是在理解上,要注意的是,这个线程函数体里面的代码是
// 在新的线程中运行。虽然在源代码上,这里面的代码和其他的代码
// 存在于同一个文件中


“可是要在程序运行的才创建的线程,要怎么处理呢”--》不明白你的这个子问题的意思。
新的线程都是在程序运行起来之后,由相应的创建函数创建的。没有哪个线程是在编译时创建的啊。

2. 同一个线程处理函数的代码可以被多个线程共享的。可就是说,你可以只定义一个线程函数。不同的线程创建起来后,运行相同的代码。可以通过传递不同的参数(这个参数可以在创建新线程时从外面传递进去),来让线程函数体内的代码有不同的运行逻辑。
DWORD WINAPI MyThreadFunction (LPVOID pParam /*线程的参数*/)

int nMyParam = (int)pParam;
if ( 0 == nMyParam )
else if ( 1 == nMyParam )
else if (...)

对于线程函数的参数,它是LPVOID,但是你在外面可以给他传递一个整形,或者指针,然后在线程函数体内强制转型回来使用。真正使用什么数据类型,与你自己控制。

在理解上,也要注意理解多个线程运行同一份代码的意思。
如果多个线程的线程函数读写同一个全局变量或者访问同一个资源,就需要做同步控制。使用临界区,Mutex等同步对象来控制。

对于多线程的运行机制的理解,比较重要。
理解了之后,你才能游刃有余地控制它。要不然,很容易带来问题。

使用主数据库在 Spring MVC 应用程序中实现多租户?

...布时间】:2018-12-0305:39:41【问题描述】:我正在尝试使用基于此代码源demo的SpringMVC、Springsecurity、Hibernate和MySql创建一个应用程序来实现具有独立数据库的多态概念。我需要添加 查看详情

java示例代码_在Java中实现多线程池

java示例代码_在Java中实现多线程池 查看详情

在基于 mfc 对话框的应用程序中添加 sql 数据库

】在基于mfc对话框的应用程序中添加sql数据库【英文标题】:Addsqldatabaseinmfcdialogbasedapplication【发布时间】:2012-07-0610:13:58【问题描述】:我有一个基于MFC对话框的项目,现在我想在该项目中添加数据库。我不知道该怎么做。谁... 查看详情

java中实现多线程的两种方式

/** * 使用Thread类模拟4个售票窗口共同卖100张火车票的程序 *  * 没有共享数据,每个线程各卖100张火车票 *  * @author jiqinlin * */public class ThreadTest {  查看详情

在 iPad App 中实现多用户聊天

...读了许多文章。我已经缩小到1)XMPP(Jabber)和2)网络套接字基于解决方案 查看详情

怎么在mfc对话框中实现模拟键盘输入

  通常窗口中模拟输入是用SendMessage发送KEYDOWN和KEYUP消息。不过对话框中主要是控件模式,通常设置控件内容即可,没必要发送消息。参考技术Akeybd_event() 查看详情

基于MFC的动画图形实现对话框

】基于MFC的动画图形实现对话框【英文标题】:AnimatedgraphicsimplementationdialogbasedMFC【发布时间】:2011-08-1208:39:39【问题描述】:谁能建议我在我的基于对话框的mfc程序中实现动画的特殊方法?我打算添加的动画就像一个建筑挖掘... 查看详情

MFC 对话框应用程序未关闭

】MFC对话框应用程序未关闭【英文标题】:MFCdialogapplicationnotclosing【发布时间】:2012-10-2316:00:51【问题描述】:我正在尝试关闭基于CDialog的应用程序。我调用CWnd::OnClose()然后调试器进入Windows系统文件。在调试器输出窗口中,我... 查看详情

如何在基于 MFC 对话框的应用程序中设置主对话框的大小

】如何在基于MFC对话框的应用程序中设置主对话框的大小【英文标题】:HowtosetthesizeofthemaindialoginaMFCdialogbasedapplication【发布时间】:2015-08-2602:43:09【问题描述】:我正在尝试使用MFC创建一个基于对话框的应用程序,似乎我可以... 查看详情

无法在基于 MFC 对话框的应用程序中使用 SetDlgItemTextW() 设置对话框的标题

】无法在基于MFC对话框的应用程序中使用SetDlgItemTextW()设置对话框的标题【英文标题】:UnabletosettheTitleoftheDialogusingSetDlgItemTextW()inMFCDialogBasedapplication【发布时间】:2016-03-2312:14:46【问题描述】:我的要求是:我正在使用基于MFC对... 查看详情

如何在基于 mfc 对话框的应用程序中将选项卡添加到 tabcontrol 并在对话框中间显示选项卡

】如何在基于mfc对话框的应用程序中将选项卡添加到tabcontrol并在对话框中间显示选项卡【英文标题】:howtoaddtabsintotabcontrolinmfcdialogbasedapplicationanddisplaythetabsinmiddleofthedialog【发布时间】:2013-03-0111:13:38【问题描述】:我正在基于... 查看详情

我如何做很酷的对话 (MFC)

...布时间】:2012-06-0617:08:24【问题描述】:我是否必须使用对话框或消息并不重要,但我需要以某种方式执行以下操作:我有一个基于对话框的MFC应用程序。主对话框调用一个创建线程的过程。对过程的调用在while循环内。(基本... 查看详情

在工作线程完成 MFC 时禁用控制变量

...-2210:03:42【问题描述】:我正在使用VisualStudio2015开发基于对话框的MFC应用程序。基本上我的问题是我有一个按钮,在用户选择了必要的输入(将被解析和放入不同的向量中)。为了避免复杂化,我决定用户在工作线程完成计算之... 查看详情

在 C++ 中实现 C++ 线程库

...发布时间】:2009-02-1106:29:26【问题描述】:我是一名java程序员,但目前正在使用c++语言。与java不同,c++没有定义任何线程实用程序。在C++中实现多线程应用程序对我来说有点困难。有没有人可以使用C++实现他自己的线程库?你... 查看详情

java中实现多线程继承thread类与实现runnable接口的区别

Java中线程的创建有两种方式:  1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中  2.  通过实现Runnable接口,实例化Thread类  在实际应用中,我们经常用到多线程,如... 查看详情

如何在 Visual Studio 中禁用基于对话框的 MFC 应用程序的自动关闭?

】如何在VisualStudio中禁用基于对话框的MFC应用程序的自动关闭?【英文标题】:Howtodisableautoclosingofadialog-basedMFCapplicationinVisualStudio?【发布时间】:2012-06-1209:46:46【问题描述】:当我启动程序时,我会看到对话框和所有内容。但... 查看详情

创建线程会在终止时挂起 MFC 对话框应用程序

】创建线程会在终止时挂起MFC对话框应用程序【英文标题】:CreatingathreadhangsMFCdialogappontermination【发布时间】:2010-07-1903:51:27【问题描述】:我已经缩小了一个问题的范围。我创建了一个简单的对话框应用程序VC++6.0。我在主线... 查看详情

mfc多线程各种线程用法.

http://blog.csdn.net/qq61394323/article/details/9328301一、问题的提出    编写一个耗时的单线程程序:      新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为 IDC_ 查看详情