社区
Delphi
帖子详情
怎样在线程中显示一个窗口,然后再关闭它,要求在窗口显示期间,主线程不能处理任何消息。就像模态窗口一样?
wyj
2000-03-18 06:12:00
...全文
262
6
打赏
收藏
怎样在线程中显示一个窗口,然后再关闭它,要求在窗口显示期间,主线程不能处理任何消息。就像模态窗口一样?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xzw
2000-03-19
打赏
举报
回复
我想不能处理任何消息并不是你的本意吧?起码重画消息应该处理吧!:-)
此处你不想处理的消息我猜想应该是来自用户的输入,有一个办法,就是在线程要
弹出窗口时,把主窗口上的各种可能接收输入的窗口给Disable掉.这样就可以起到
你要的效果了.
我也碰到过你这样的问题,可能需求不一样,我是在线程中弹出错误信息,此时主线程
不能再有任何操作,唯有DISABLE了.
不知猜测你的用意是否正确,见笑了.
Lin
2000-03-19
打赏
举报
回复
To wyj:
这好象不是使用多线程的目的? 如果非要这样, 很有可能连你的弹出窗口也响应不了任何消息, 除非弹出窗口有自己的消息循环.
wyj
2000-03-18
打赏
举报
回复
有道理,多谢.这麽说是没有办法了?如果真的没有办法的话,那就在主线程中实现吧,可是又应该怎样做呢?
lu0
2000-03-18
打赏
举报
回复
线程驱动是在KERNEL MODE实现的.也就是说用户线程不能阻止切换线程.
所以如果不自己加LOCK.就不能阻止主线程获得信息.
见MSDN的线程同步章节.包括挂起主线程.
torent
2000-03-18
打赏
举报
回复
好像没这么简单!
你是否将每一行代码都加上synchronize呢?
gypb
2000-03-18
打赏
举报
回复
用synchronize不就得了
qt 多
线程
防止
主
线程
做循环操作导致界面假死
qt 多
线程
防止
主
线程
做循环操作导致界面假死。试过多
线程
的几种方法,只有这个方法可行。代码亲测可行。在子
线程
死循环,界面正常不死!!!
Qt子
线程
更新数据发到
主
线程
显示
.rar
Qt的子
线程
无法直接更新
主
UI,需要发送信号到
主
线程
进行更新,我用的QTableWidget展示数据。
Windows游戏编程系列之1:GUI
窗口
界面编程及游戏入门实战
我将带领大家来系统学习Windows的
窗口
编程,包括
消息
、
窗口
、GDI绘图、游戏开发等。本课程比较基础,非常适合初学者入门,读者可以边学习边实践。具体的章节目录和课程内容如下所示:---------------------------------------------Windows游戏编程系列之1:GUI界面编程及游戏入门实战1、Windows创建第
一个
窗口
WinMain入口函数 5进行Windows编程的调试手法 6
窗口
从哪里来? 7
窗口
编程的步骤 7
窗口
编程需要的
主
要结构 8
窗口
编程需要的
主
要API 92、Windows的
窗口
过程与
消息
机制 如何留住
窗口
? 121)Windows的
消息
与
消息
循环 142)
消息
处理
函数与常用
消息
17)Windows的
窗口
过程函数 19 3、GDI编程之设备上下文 1)GDI的通用编程框架 222)GDI的绘图步骤 253)GDI获取设备句柄 254、GDI编程之绘制几何图形 画点、线 28颜色COLORREF 29矩形 29画圆、饼图、弦图 305、GDI编程之自定义画笔画刷画笔简介 32画刷简介 33画笔案例 33画刷案例 346、GDI编程之绘制文字 DrawText函数 35TextOut 函数 (wingdi.h) 36CreateFont函数 37绘制文本案例 377、GDI编程之绘制位图 位图简介 381)在资源
中
添加位图资源 392)从资源
中
加载位图: LoadBitmap 393)创建
一个
与当前DC相匹配的DC(内存DC) 394)将bitmap放入匹配的DC
中
:SelectObject 405)成像(1:1 比例 ) 406)取出位图 407)释放位图 418)释放匹配的DC 41绘制位图案例 41 8、Windows鼠标键盘
消息
一、键盘
消息
421、键盘
消息
422、
消息
参数: 423、
消息
的使用: 424、键盘
消息
的案例代码 43二、鼠标
消息
441、基本鼠标
消息
442、双击
消息
443、滚轮
消息
454、不响应双击
消息
45 9、Windows定时器
消息
定时器
消息
介绍 47创建定时器 47
关闭
定时器 47定时器
消息
案例代码 4810、GDI游戏之跳舞动画 11、GDI游戏之走路动画 12、GDI贪吃蛇游戏实战
VC进程ID获得
主
窗口
句柄获得进程名
VC获得进程ID获得
主
线程
ID获得
窗口
句柄获得
主
窗口
获得进程名 1.
窗口
类名
窗口
句柄
窗口
标题
窗口
句柄 HWND FindWindow( LPCTSTR lpClassName, //
窗口
类名 可用 VC或者VS自带的Spy++查看 LPCTSTR lpWindowName //
窗口
标题 ); 举例: 以 记事本为例, 记事本
窗口
类名 为:NotePad,
窗口
标题 视按具体情况而定,假设为"新建 文本文档.txt - 记事本"
窗口
类名
窗口
句柄 TCHAR lpClassName[]=TEXT("NotePad"); HWND hWnd=::FindWindow(lpClassName,NULL); if(hWnd && IsWindow(hWnd)) ::ShowWindow(hWnd,SW_HIDE);
窗口
标题
窗口
句柄 TCHAR lpWindowName[]=TEXT("新建 文本文档.txt - 记事本"); HWND hWnd=::FindWindow(NULL,lpWindowName); if(hWnd && IsWindow(hWnd)) ::ShowWindow(hWnd,SW_HIDE); 2.
窗口
句柄 进程ID
窗口
句柄
主
线程
ID 要使用到的函数: DWORD GetWindowThreadProcessId( HWND hWnd, //目标
窗口
句柄 LPDWORD lpdwProcessId //返回目标
窗口
对应进程ID ); 例子: DWORD dwProcId=0;//存放返回的进程ID DWORD dwThreadId=0;//存放返回的
主
线程
ID HWND hWnd=XXXX;//这里省略,可能用任务方式得到
一个
窗口
的句柄.比如用1
中
的方法. dwThreadId=GetWindowThreadProcessId(hWnd,&dwProcId);//同时得到进程ID和
主
线程
ID. 3.
窗口
HAND CWnd 用CWnd::FromHandle(HWND hWnd)函数.很多类都有这个函数. 4.进程名 进程ID (注:进程名,即在"任务管理器"
中
看到的名字) 用CCheckObject类(详细实现源文件); 例子: 以记事本为例,进程名为 NOTEPAD.EXE (不一定是大写哦,得到任务管理器是
显示
而定); CCheckObject ch; TCHAR Name[]=TEXT("NOTEPAD.EXE"); DWORD dwProcId=ch.GetProcessId(Name); 5. 进程名
主
线程
ID 例子: CCheckObject ch; TCHAR Name[]=TEXT("NOTEPAD.EXE"); DWORD dwThreadId=ch.GetThreadId(Name); 6. 进程名
主
窗口
句柄 CCheckObject ch; TCHAR Name[]=TEXT("NOTEPAD.EXE"); HWND hWnd=ch.GetTargetWindowHanle(Name); 7. 其它说明 从CCheckObject类和上面的源码
中
,不难写出从 进程ID
主
线程
ID 进程ID
主
窗口
句柄
主
线程
ID--->
主
窗口
句柄 等等其它类似转换. 对于
主
窗口
,特点如下: A.
不能
用进程ID,要用
线程
ID,因为
一个
进程可能有多个
线程
,每个
线程
都可能会有
主
窗口
. B.
主
窗口
不会有WS_CHILD属性 C.
主
窗口
没有父
窗口
D.
主
窗口
一般都有子
窗口
(这个不是一定的,但是具有普遍性)
将创建的
线程
绑定到双核CPU指定的一颗CPU
中
创建
一个
线程
,并将该
线程
绑定到多核cpu
中
,不占用
主
线程
的资源,这样可以在所开的
线程
中
做一些动作,不会影响
主
线程
中
的动作。应用:客户将所有的刷新动作交给
主
线程
完成时,可能拖动鼠标,
窗口
均在不断的刷新,CPU资源占用率很高,导致整个程序运行速度变慢,这样时候,可以考虑将一些刷新
显示
的工作绑定到另一颗核
中
去实现。
Delphi
5,388
社区成员
262,731
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章