MFC 进程和线程的基本问题

my_lover1314 2010-06-26 02:51:47
要做课设了,一直考虑进程和线程的问题。。
我创建了一个dlalog工程,在主窗口添加了两个按钮。 点击按钮可以在打开其他的对话框。
问题是 怎么能让两个对话框同时工作?
我觉得创建线程可以完成这个任务,但是为什么在MFC里如果不关闭当前的对话框,就不可以使用后面的对话框?
可以用进程解决吗 ?怎么办?
...全文
191 22 打赏 收藏 转发到动态 举报
写回复
用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)

15,471

社区成员

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

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