社区
进程/线程/DLL
帖子详情
MFC 进程和线程的基本问题
my_lover1314
2010-06-26 02:51:47
要做课设了,一直考虑进程和线程的问题。。
我创建了一个dlalog工程,在主窗口添加了两个按钮。 点击按钮可以在打开其他的对话框。
问题是 怎么能让两个对话框同时工作?
我觉得创建线程可以完成这个任务,但是为什么在MFC里如果不关闭当前的对话框,就不可以使用后面的对话框?
可以用进程解决吗 ?怎么办?
...全文
191
22
打赏
收藏
MFC 进程和线程的基本问题
要做课设了,一直考虑进程和线程的问题。。 我创建了一个dlalog工程,在主窗口添加了两个按钮。 点击按钮可以在打开其他的对话框。 问题是 怎么能让两个对话框同时工作? 我觉得创建线程可以完成这个任务,但是为什么在MFC里如果不关闭当前的对话框,就不可以使用后面的对话框? 可以用进程解决吗 ?怎么办?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
DontKissBossAss
2010-06-26
打赏
举报
回复
前两天才明白的道理。
DontKissBossAss
2010-06-26
打赏
举报
回复
[Quote=引用 19 楼 dontkissbossass 的回复:]
对,就是这个意思,线程执行完sleep以后就是return,这个时候线程就退出了
[/Quote]
呵呵,你可能对windows窗口为什么一直存在表示疑惑,
去建一个win32窗体看看就知道了
里面有一句
MSG msg;
while (GetMessage(&msg,NULL,0,0)!=NULL)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}。他一直在执行,而且,把windows消息驱动起来了,所以啊,窗口程序,“一直存在,知道你点关闭”
my_lover1314
2010-06-26
打赏
举报
回复
恩,终于明白了那么一点。谢谢你
DontKissBossAss
2010-06-26
打赏
举报
回复
对,就是这个意思,线程执行完sleep以后就是return,这个时候线程就退出了
my_lover1314
2010-06-26
打赏
举报
回复
[Quote=引用 16 楼 dontkissbossass 的回复:]
sleep,相当于告诉CPU,我当前执行sleep的的线程,5秒内你不要执行,,你创建的线程入口是create,他在创建完之后,会立即返回,这个时候,因为ccreatedlg这个对象是在栈上的,会sleep完成之后立即销魂。
如果,你窗口是失去响应5秒钟左右,答案有了,如果不是,现在还有其他问题。
[/Quote]
没有其他的问题,就是5秒。
你的意思是说,在这里线程的任务就是创建了窗口,而不是执行窗口里面的操作(假设里面还有操作)? 我这样理解对吗?
DontKissBossAss
2010-06-26
打赏
举报
回复
你可以做个实验,在窗口上托一个button,然后为这个button建一个相应函数,sleep(20000),试试,这个窗口会在20秒内,发白,失去响应。
DontKissBossAss
2010-06-26
打赏
举报
回复
sleep,相当于告诉CPU,我当前执行sleep的的线程,5秒内你不要执行,,你创建的线程入口是create,他在创建完之后,会立即返回,这个时候,因为ccreatedlg这个对象是在栈上的,会sleep完成之后立即销魂。
如果,你窗口是失去响应5秒钟左右,答案有了,如果不是,现在还有其他问题。
my_lover1314
2010-06-26
打赏
举报
回复
[Quote=引用 12 楼 dontkissbossass 的回复:]
我也是学生,写过点MFC,我总结如下
1:主线程相应UI时候,别sleep,否则就是窗口 变白失去响应(sleep多长时间,这种现象持续多长时间)
2:在肉眼上看,或者双核里面,你可以理解,线程和主线程是同步运行的。
建议看看《windows核心编程》
[/Quote]
线程函数里没写什么操作,所以每次都是出现一瞬间,为了更清楚的看到,我在里面sleep 5秒。
既然是可以同时运行的,我还是不明白在线程Sleep的时候,不能操作主线程的原因。 我看看书呀,没文化真可怕!
wltg2001
2010-06-26
打赏
举报
回复
[Quote=引用 10 楼 my_lover1314 的回复:]
引用 6 楼 dontkissbossass 的回复:
大哥,你要知道一点,主线程创建了UI,对UI的更新是主线程的使命,现在窗口白色,不相应了,肯定是你点一个按钮以后,主线程一直在循环里面执行,或者干脆已经死锁了。
检查自己代码吧
是不是我对线程、进程的理解有错。。。。。
进程A创建了线程B,那么A与B是不是同时运行 ?
[/Quote]
A与B是同时运行的,你给的代码不是太全,看不清楚
DontKissBossAss
2010-06-26
打赏
举报
回复
错了,我写的有点错误,你线程之创建了一个UI就退出了。这个时候,窗口要销毁的。
DontKissBossAss
2010-06-26
打赏
举报
回复
我也是学生,写过点MFC,我总结如下
1:主线程相应UI时候,别sleep,否则就是窗口 变白失去响应(sleep多长时间,这种现象持续多长时间)
2:在肉眼上看,或者双核里面,你可以理解,线程和主线程是同步运行的。
建议看看《windows核心编程》
DontKissBossAss
2010-06-26
打赏
举报
回复
1:你那个线程一直在创建窗口,具体什么时候失败,你自己检查返回值问题了,线程一直在创建窗口,没东西相应其他操作,窗口失去响应,变白
同学,看看多线程操作的例子吧。或者看看模态和非模态。搜索下,主线程就可以相应所有的UI操作了。其他问题就是线程操作了。
my_lover1314
2010-06-26
打赏
举报
回复
[Quote=引用 6 楼 dontkissbossass 的回复:]
大哥,你要知道一点,主线程创建了UI,对UI的更新是主线程的使命,现在窗口白色,不相应了,肯定是你点一个按钮以后,主线程一直在循环里面执行,或者干脆已经死锁了。
检查自己代码吧
[/Quote]
是不是我对线程、进程的理解有错。。。。。
进程A创建了线程B,那么A与B是不是同时运行 ?
my_lover1314
2010-06-26
打赏
举报
回复
void CMy20106261Dlg::OnCreate()
{
// TODO: Add your control notification handler code here
AfxBeginThread (Created,THREAD_PRIORITY_NORMAL,0,0,NULL);
}
UINT CMy20106261Dlg::Created(LPVOID pParam)
{
CCreate dlg;
dlg.Create(IDD_DIALOG1,0);
dlg.ShowWindow(SW_SHOW);
Sleep(5000);
return 0;
}
Created函数就是线程的入口,执行Created函数的不就是线程吗?
在他Sleep期间为什么不可以对主窗口操作?
Sleep的难度不只是这个线程吗?
Eleven
2010-06-26
打赏
举报
回复
[Quote=引用 3 楼 my_lover1314 的回复:]
引用 2 楼 chenlycly 的回复:
就是啊,用非模态对话框就是了...
为什么打开之后 一直不能操作 ? 最后没有响应
而且下面的窗口也成白色的了 是不是单进程的根本就不行 ?
[/Quote]
谁知道你的代码怎么写的。。。
DontKissBossAss
2010-06-26
打赏
举报
回复
跟踪一下不就知道了。。。。
DontKissBossAss
2010-06-26
打赏
举报
回复
大哥,你要知道一点,主线程创建了UI,对UI的更新是主线程的使命,现在窗口白色,不相应了,肯定是你点一个按钮以后,主线程一直在循环里面执行,或者干脆已经死锁了。
检查自己代码吧
my_lover1314
2010-06-26
打赏
举报
回复
[Quote=引用 4 楼 dontkissbossass 的回复:]
引用 3 楼 my_lover1314 的回复:
引用 2 楼 chenlycly 的回复:
就是啊,用非模态对话框就是了...
为什么打开之后 一直不能操作 ? 最后没有响应
而且下面的窗口也成白色的了 是不是单进程的根本就不行 ?
CPU一直在主线程的某个循环里面执行,或者已经休眠了,检查代码吧
[/Quote]
线程是可以独立执行的呀,我只是在创建的线程里加了循环,为什么其他的也不能操作?主窗口也不能操作?
DontKissBossAss
2010-06-26
打赏
举报
回复
[Quote=引用 3 楼 my_lover1314 的回复:]
引用 2 楼 chenlycly 的回复:
就是啊,用非模态对话框就是了...
为什么打开之后 一直不能操作 ? 最后没有响应
而且下面的窗口也成白色的了 是不是单进程的根本就不行 ?
[/Quote]
CPU一直在主线程的某个循环里面执行,或者已经休眠了,检查代码吧
my_lover1314
2010-06-26
打赏
举报
回复
[Quote=引用 2 楼 chenlycly 的回复:]
就是啊,用非模态对话框就是了...
[/Quote]
为什么打开之后 一直不能操作 ? 最后没有响应
而且下面的窗口也成白色的了 是不是单进程的根本就不行 ?
加载更多回复(2)
MFC
程序设计详细实例 第25章
进程
和
线程
MFC
程序设计详细实例 第25章
进程
和
线程
MFC
程序设计详细实例 第25章
进程
和
线程
MFC
程序设计详细实例 第25章
进程
和
线程
MFC
程序设计详细实例 第25章
进程
和
线程
MFC
程序设计详细实例 第25章
进程
和
线程
MFC
程序设计详细...
C++实现的可以安全的暂停、继续、停止
线程
的
线程
类和Sample
虽然微软提供了 SuspendThread、TerminateThread 等函数“似乎”可以完成这个功能,但如果你在代码里使用这些函数,则往往会遇到各种
问题
(比如SuspendThread时正好在CRT分配内存的锁中造成其他
线程
也跟着锁死,...
C++
MFC
实战速成教程(VS2013)上
让零基础朋友快速掌握
MFC
的开发,进入到C++的Windows编程之殿堂。
MFC
规模庞大,结构复杂,导致很多初学者学习困难。本教程,则排除一切对初步者的干扰,从
MFC
庞大的结构中,单刀直入,取出最核心的类,以简明易懂的方式,剖析于学员面前。并通过纯手工方式编写
MFC
的程序,把
MFC
的基础架构,功能,由来,作用一一详细展示。以此为基础,进而把
MFC
的各个类,以及类之间的协作关系融汇贯通。
一个服务器对多个客户端的
MFC
Socket编程示例(实现简单的即时通讯功能)
实现一个服务器对多个客户端的关键是,在服务端的使用集合CPtrList类用保存客户端的socket对象,思想与Java中的编程思想一样,只不过Java中会使用多
线程
技术,在Vector集合保存客户端的socket对象,而
MFC
框架提供了...
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章