【求助】MsgWaitForMultipleObjects 函数的问题

VC/MFC > 基础类 [问题点数:20分,结帖人Squall001]
等级
本版专家分:123
结帖率 95.41%
等级
本版专家分:123
等级
本版专家分:123
等级
本版专家分:123
等级
本版专家分:123
等级
本版专家分:123
等级
本版专家分:123
等级
本版专家分:123
等级
本版专家分:123
等级
本版专家分:123
等级
本版专家分:123
Squall001

等级:

【MFC】 使用MsgWaitForMultipleObjects解决后台线程退出时SendMessage响应问题

处理这类问题的机制通常是,主程序在OnClose()函数中通过激活事件通知后台线程退出。 在这种情况下,后台线程退出时调用SendMessage()函数发送消息,主程序已不能响应。因为,此时主程序进入OnClose()函数后,消息...

MsgWaitForMultipleObjects 后遗症 与解决办法

调用SendMessage 产生死锁的问题分析 之后,我在界面程序中不再使用 WaitForSingleObject 了,而改用如下的函数 DWORD WaitObjectAndMsg(HANDLE hEventThread, DWORD dwMilliseconds) { BOOL bWait = TRUE; ...

多线程和MsgWaitForMultipleObjects

如果在工作线程中有可能涉及到了消息驱动的API,那么不能在主线程中使用WaitForSingleObject一类函数,而建议使用MsgWaitForMultipleObjects   while(TRUE) { DWORD result ; MSG msg ; result = ...

WaitForMultipleObject与MsgWaitForMultipleObjects用法

WaitForSingleObject、WaitForMultipleObject、MsgWaitForMultipleObjects、MsgWaitForMultipleObjectsEx使用方法

MFC 主线程等待子线程退出函数MsgWaitForMultipleObjects

void WaitForThreadExit(void) { DWORD dwRet; MSG msg; int wait_count=4;//线程句柄有4个 int nExitThreadCount=0;... dwRet = MsgWaitForMultipleObjects(wait_count, hArray, FALSE, INFINITE, QS_...

在用户线程/主线程中推荐MsgWaitForMultipleObjects代替WaitForSingleObject和WaitForMultipleObjects()...

多线程同步,采用WaitForSingleObject和WaitForMultipleObjects()函数出现卡死现象,采用MsgWaitForMultipleObjects代替可以解决此类问题

MsgWaitForMultipleObjects 返回值为 WAIT_OBJECT_0 + nCount 时候

http://bbs.csdn.net/topics/380187993  与waitformutipleobjects 不一样 , 需要处理消息的。

MsgWaitForMultipleObjects

GetMessage()有点像特殊版本的WaitForSingleObject(),它等待消息而...问题是,如果你正在使用WaitForSingleObject()或WaitForMultipleObjects()等待某个对象被激发,你根本无法回到主消息循环中去。MsgWaitForMultiple

如何暂停主线程直到第二个线程的终止?

如何暂停主线程直到第二个线程的终止?来自 ...)作为翻译这篇短文的我在VC++开发中遇到了与 Ybbozman 相类似的问题,在主应用程序中(主进程-其实还是线程,称主线程也可),点击“查找”按钮

对话框中WaitForSingleObject等待线程退出导致程序阻塞的原因及解决

<br />  今天在调试程序中发现了程序中出现的一个问题,具体如下: <br />  在对话框中新建一个线程worker thread,当用户点击cancel时,通知该线程函数退出,同时用WaitForSingleObject等待...

WaitForSingleObject和MsgWaitForMultipleObjects

WaitForSingleObject会阻塞对话框线程(Dialog thread),同时也会导致了对话框的消息循环机制被阻塞 ,而我在线程函数中会对对话框有一些UI操作(SetPos, SetWindowText),这些对对话框的UI操作实际上是通过线程向...

C#延时函数的使用

在线程中如果需要延时,尽量不要使用Sleep()函数,这样会导致时间片切到别的线程中。 使用如下函数:  //Delay function public static void Delay(int milliSecond) { int start = Environment.TickCount; ...

在主线程中慎用WaitForSingleObject (WaitForMultipleObjects)

为了解决在主线程中Wait的问题,微软专门设计了一个函数MsgWaitForMultipleObjects,这个函数即可以等待信号(thread,event,mutex等等),也可以等待消息(MSG)。即不论有信号被激发或者有消息到来,此函数都可以...

项目总结(二)——改进的延时函数Delay

解决上一节中延时函数占CPU使用率(达50%)的第二种方法是利用消息机制,通过API函数MsgWaitForMultipleObjects等待消息或超时的到来,从而避免使用循环检测使CPU占用率过高。完整的改进版Delay函数代码如下:   ...

主线程利用MsgWaitForMultipleObjects等待子线程结束时,同时处理子线程发送的窗口消息

子线程分别调用SendMessage函数发送界面信息到主线程,而主线程在创建完子线程后就会wait子线程退出。 子线程调用SendMessage时,SendMessage函数需要执行完后才能返回,SendMessage返回后子线程才可以退出,但是...

VC++ 中主线程等待子线程结束的方法

void WaitForThreadExit(void) { DWORD dwRet; //返回值 MSG msg; int wait_count=4; //线程句柄有4个 int nExitThreadCount=0; //记录线程退出个数 ... dwRet = MsgWaitForMultipleObj...

C# 高精度延迟代码执行时间(us/ns)

我们常用的延迟代码函数如Sleep,Thread.Sleep函数, 但是它们只允许输入毫秒,如果我们需求更高精度 如 纳秒(ns)/微秒(us)的延迟代码执行的时间 怎么去做呢? 在上图我们可以看见有这样一个传址参数 long ...

MFC主线程使用WaitForSingleObject阻塞的问题

在MFC程序的主线程中如果使用WaitForSingleObject等线子线程,而子线程里使用了有关于消息的函数,比如SetWindowText,InsertItem,SetItemText这些函数,就有会导致主主线程阻塞问题,看看这段代码。 DWORD WINAPI ...

在Delphi中WaitForMultipleObjects的使用

procedure ThreadTest;stdcall; var Handles:TWOHandleArray; //Handle:THandle; Test:TTest; i:Integer; begin for i := 0 to 10 do begin Test := TTest.Create(False);...

windows主线程如何等待子线程结束

我在主线程中起了多个子线程,想等所有子线程结束主线程再继续做后面...但是我自起子线程的函数下面用WaitForMultipleObjects等待所有子线程结束,会阻塞主线程导致程序无反应死掉。 请各位大侠帮忙看下应该如何处理?

PeekMessage究竟做了什么?

把Delphi里TThread的WaitFor函数转化成C++代码,就会是下面这个样子。 BOOL TThread::WaitFor(HANDLE hThread){ MSG msg; HANDLE handle[1]; handle[0] = hThread; DWORD dwWaitResult = 0; do

WaitForMultipleObjects与MsgWaitForMultipleObjects用法

用户模式的线程同步机制效率高,如果需要考虑线程同步问题,应该首先考虑用户模式的线程同步方法。 但是,用户模式的线程同步有限制,对于多个进程之间的线程同步,用户模式的线程同步方法无能为力。这时,只能考虑...

程序退出时使用WaitForSingleObject导致程序阻塞的原因及解决方法

程序退出时使用WaitForSingleObject导致程序阻塞...最近在开发程序时突然遇到了在析构函数中使用WaitForSingleObject等待线程结束时造成程序阻塞的情况。经过仔细分析发现是在线程执行过程中更新了界面资源,而(UI线程

win32多线程-重写消息循环

最近正在学习《win32多线程程序设计》,这是其中一段重写消息循环的代码事例,以后可能用的上。 while (!quit || gNumPrinting > 0) { // Wait for next message or object being signaled DWORD dwWake;...

MsgWaitForMultipleObjects用法

MsgWaitForMultipleObjects()不允许handles数组中有缝隙产生。所以当某个handle被激发了时,你应该在下一次调用MsgWaitForMultipleObjects()之前先把handles数组做个整理。紧压,不要只是把数组中的handle设为...

Delphi 延迟函数 比sleep 要好的多

原文:... //延迟函数:方法一 procedure delay(msecs:integer); var Tick: DWord; Event: THandle; begin Event := CreateEvent(nil, False, False, nil);

MFC多线程编程注意事项

1.工作线程给主线程发消息使用的是SendMessage和PoseMessage函数。这两个函数的区别在于SendMessage函数是阻塞方式,而PoseMessage函数是非阻塞方式。如果不是严格要求工作线程与主线程必须同步执行,则推荐使用...

windows核心编程-信号量(semaphore)

线程同步的方式主要有:临界区、互斥区、事件、信号量四种方式。 前边讲过了互斥器线程同步-----windows核心编程-互斥器(Mutexes),这章我来介绍一下信号量(semaphore)线程同步。 理论上说,mutex是semaphore的一种...

深入浅出MySQL数据库开发、优化与管理维护

第1部分 基础篇  第1章 MySQL的安装与配置    1.1 MySQL的下载     1.1.1 在Windows平台下下载MySQL     1.1.2 在Linux平台下下载MySQL    1.2 MySQL的安装     1.2.1 在Windows平台下安装MySQL     1.2.2 在Linux平台下安装MySQL    1.3 MySQL的配置     1.3.1 Windows平台下配置MySQL     1.3.2 Linux平台下配置MySQL    1.4 启动和关闭MySQL服务     1.4.1 在Windows平台下启动和关闭 MySQL服务     1.4.2 在Linux平台下启动和关闭MySQL服务    1.5 小结 显示全部信息第1部分 基础篇  第1章 MySQL的安装与配置    1.1 MySQL的下载     1.1.1 在Windows平台下下载MySQL     1.1.2 在Linux平台下下载MySQL    1.2 MySQL的安装     1.2.1 在Windows平台下安装MySQL     1.2.2 在Linux平台下安装MySQL    1.3 MySQL的配置     1.3.1 Windows平台下配置MySQL     1.3.2 Linux平台下配置MySQL    1.4 启动和关闭MySQL服务     1.4.1 在Windows平台下启动和关闭MySQL服务     1.4.2 在Linux平台下启动和关闭MySQL服务    1.5 小结   第2章 SQL基础    2.1 SQL简介    2.2 (My)SQL使用入门     2.2.1 SQL分类     2.2.2 DDL语句     2.2.3 DML语句     2.2.4 DCL语句    2.3 帮助的使用     2.3.1 按照层次看帮助     2.3.2 快速查阅帮助     2.3.3 常用的网络资源    2.4 小结   第3章 MySQL支持的数据类型    3.1 数值类型    3.2 日期时间类型    3.3 字符串类型     3.3.1 CHAR和VARCHAR类型     3.3.2 BINARY和VARBINARY类型     3.3.3 ENUM类型     3.3.4 SET类型    3.4 小结   第4章 MySQL中的运算符    4.1 算术运算符    4.2 比较运算符    4.3 逻辑运算符    4.4 位运算符    4.5 运算符的优先级    4.6 小结   第5章 常用函数    5.1 字符串函数    5.2 数值函数    5.3 日期和时间函数    5.4 流程函数    5.5 其他常用函数    5.6 小结   第6章 图形化工具的使用    6.1 MySQLAdministrator     6.1.1 连接管理     6.1.2 健康检查     6.1.3 备份管理     6.1.4 Catalogs    6.2 MySQLQueryBrower    6.3 phpMyAdmin     6.3.1 数据库管理     6.3.2 数据库对象管理     6.3.3 权限管理     6.3.4 导入导出数据    6.4 小结  第2部分 开发篇  第7章 表类型(存储引擎)的选择    7.1 MySQL存储引擎概述    7.2 各种存储引擎的特性     7.2.1 MyISAM     7.2.2 InnoDB     7.2.3 MEMORY     7.2.4 MERGE    7.3 如何选择合适的存储引擎    7.4 小结   第8章 选择合适的数据类型    8.1 CHAR与VARCHAR    8.2 TEXT与BLOB    8.3 浮点数与定点数    8.4 日期类型选择    8.5 小结   第9章 字符集    9.1 字符集概述    9.2 Unicode简述    9.3 汉字及一些常见字符集    9.4 怎样选择合适的字符集    9.5 MySQL支持的字符集简介    9.6 MySQL字符集的设置     9.6.1 服务器字符集和校对规则     9.6.2 数据库字符集和校对规则     9.6.3 表字符集和校对规则     9.6.4 列字符集和校对规则     9.6.5 连接字符集和校对规则    9.7 字符集的修改步骤    9.8 小结   第10章 索引的设计和使用    10.1 索引概述    10.2 设计索引的原则    10.3 BTREE索引与HASH索引    10.4 小结   第11章 视图    11.1 什么是视图    11.2 视图操作     11.2.1 创建或者修改视图     11.2.2 删除视图     11.2.3 查看视图    11.3 小结   第12章 存储过程和函数    12.1 什么是存储过程和函数    12.2 存储过程和函数的相关操作     12.2.1 创建、修改存储过程或者函数     12.2.2 删除存储过程或者函数     12.2.3 查看存储过程或者函数     12.2.4 变量的使用     12.2.5 定义条件和处理     12.2.6 光标的使用     12.2.7 流程控制    12.3 小结   第13章 触发器    13.1 创建触发器    13.2 删除触发器    13.3 查看触发器    13.4 触发器的使用    13.5 小结   第14章 事务控制和锁定语句    14.1 LOCKTABLE和UNLOCKTABLE    14.2 事务控制    14.3 分布式事务的使用     14.3.1 分布式事务的原理     14.3.2 分布式事务的语法     14.3.3 存在的问题    14.4 小结   第15章 SQL中的安全问题    15.1 SQL注入简介    15.2 应用开发中可以采取的应对措施     15.2.1 PrepareStatementBind-variable     15.2.2 使用应用程序提供的转换函数     15.2.3 自己定义函数进行校验    15.3 小结   第16章 SQLMode及相关问题    16.1 MySQLSQLMode简介    16.2 常用的SQLMode    16.3 SQLMode在迁移中如何使用    16.4 小结  第3部分 优化篇  第17章 常用SQL技巧和常见问题    17.1 正则表达式的使用    17.2 巧用RAND()提取随机行    17.3 利用GROUPBY的WITHROLLUP子句做统计    17.4 用BITGROUPFUNCTIONS做统计    17.5 数据库名、表名大小写问题    17.6 使用外键需要注意的问题    17.7 小结   第18章 SQL优化    18.1 优化SQL语句的一般步骤     18.1.1 通过showstatus命令了解各种SQL的执行频率     18.1.2 定位执行效率较低的SQL语句     18.1.3 通过EXPLAIN分析低效SQL的执行计划     18.1.4 确定问题并采取相应的优化措施    18.2 索引问题     18.2.1 索引的存储分类      18.2.2 MySQL如何使用索引     18.2.3 查看索引使用情况    18.3 两个简单实用的优化方法     18.3.1 定期分析表和检查表     18.3.2 定期优化表    18.4 常用SQL的优化     18.4.1 大批量插入数据     18.4.2 优化INSERT语句     18.4.3 优化GROUPBY语句     18.4.4 优化ORDERBY语句     18.4.5 优化嵌套查询     18.4.6 MySQL如何优化OR条件     18.4.7 使用SQL提示    18.5 小结   第19章 优化数据库对象    19.1 优化表的数据类型    19.2 通过拆分提高表的访问效率    19.3 逆规范化    19.4 使用中间表提高统计查询速度    19.5 小结   第20章 锁问题    20.1 MySQL锁概述    20.2 MyISAM表锁     20.2.1 查询表级锁争用情况     20.2.2 MySQL表级锁的锁模式     20.2.3 如何加表锁     20.2.4 并发插入(ConcurrentInserts)     20.2.5 MyISAM的锁调度    20.3 InnoDB锁问题     20.3.1 背景知识     20.3.2 获取InnoDB行锁争用情况     20.3.3 nnoDB的行锁模式及加锁方法     20.3.4 InnoDB行锁实现方式     20.3.5 间隙锁(Next-Key锁)     20.3.6 恢复和复制的需要,对InnoDB锁机制的影响     20.3.7 InnoDB在不同隔离级别下的一致性读及锁的差异     20.3.8 什么时候使用表锁     20.3.9 关于死锁    20.4 小结   第21章 优化MySQLServer    21.1 查看MySQLServer参数    21.2 影响MySQL性能的重要参数     21.2.1 key_buffer_size的设置     21.2.2 table_cache的设置     21.2.3 innodb_buffer_pool_size的设置     21.2.4 innodb_flush_log_at_trx_commit的设置     21.2.5 innodb_additional_mem_pool_size的设置     21.2.6 innodb_lock_wait_timeout的设置     21.2.7 innodb_support_xa的设置     21.2.8 innodb_log_buffer_size的设置     21.2.9 innodb_log_file_size的设置    21.3 小结   第22章 磁盘I/O问题    22.1 使用磁盘阵列     22.1.1 常见RAID级别及其特性     22.1.2 如何选择RAID级别     22.1.3 虚拟文件卷或软RAID    22.2 使用SymbolicLinks分布I/O    22.3 禁止操作系统更新文件的atime属性    22.4 用裸设备(RawDevice)存放InnoDB的共享表空间    22.5 小结   第23章 应用优化    23.1 使用连接池    23.2 减少对MySQL的访问     23.2.1 避免对同一数据做重复检索     23.2.2 使用查询缓存     23.2.3 增加CACHE层    23.3 负载均衡     23.3.1 利用MySQL复制分流查询操作     23.3.2 采用分布式数据库架构    23.4 其他优化措施    23.5 小结  第4部分 管理维护篇  第24章 MySQL高级安装和升级    24.1 Linux/UNIX平台下的安装     24.1.1 安装包比较     24.1.2 安装RPM包     24.1.3 安装二进制包     24.1.4 安装源码包     24.1.5 参数设置方法    24.2 源码包安装的性能考虑     24.2.1 去掉不需要的模块     24.2.2 只选择要使用的字符集     24.2.3 使用静态编译以提高性能    24.3 升级MySQL    24.4 MySQL降级    24.5 小结   第25章 MySQL中的常用工具    25.1 mysql(客户端连接工具)     25.1.1 连接选项     25.1.2 客户端字符集选项     25.1.3 执行选项     25.1.4 格式化选项      25.1.5 错误处理选项    25.2 myisampack(MyISAM表压缩工具)    25.3 mysqladmin(MySQL管理工具)    25.4 mysqlbinlog(日志管理工具)    25.5 mysqlcheck(MyISAM表维护工具)    25.6 mysqldump(数据导出工具)    25.7 mysqlhotcopy(MyISAM表热备份工具)    25.8 mysqlimport(数据导入工具)    25.9 mysqlshow(数据库对象查看工具)    25.10 perror(错误代码查看工具)    25.11 replace(文本替换工具)    25.12 小结   第26章 MySQL日志    26.1 错误日志    26.2 二进制日志     26.2.1 日志的位置和格式     26.2.2 日志的读取     26.2.3 日志的删除     26.2.4 其他选项    26.3 查询日志     26.3.1 日志的位置和格式     26.3.2 日志的读取    26.4 慢查询日志     26.4.1 文件位置和格式     26.4.2 日志的读取     26.4.3 其他选项    26.5 小结   第27章 备份与恢复    27.1 备份/恢复策略    27.2 逻辑备份和恢复     27.2.1 备份     27.2.2 完全恢复     27.2.3 基于时间点恢复     27.2.4 基于位置恢复    27.3 物理备份和恢复     27.3.1 冷备份     27.3.2 热备份    27.4 表的导入导出     27.4.1 导出     27.4.2 导入    27.5 小结   第28章 MySQL权限与安全    28.1 MySQL权限管理     28.1.1 权限系统的工作原理     28.1.2 权限表的存取     28.1.3 账号管理    28.2 MySQL安全问题     28.2.1 操作系统相关的安全问题     28.2.2 数据库相关的安全问题    28.3 其他安全设置选项     28.3.1 old-passwords     28.3.2 safe-user-create     28.3.3 secure-auth     28.3.4 skip-grant-tables     28.3.5 skip-network     28.3.6 skip-show-database    28.4 小结   第29章 MySQL复制    29.1 安装配置    29.2 主要复制启动选项     29.2.1 log-slave-updates     29.2.2 master-connect-retry     29.2.3 read-only     29.2.4 指定复制的数据库或者表     29.2.5 slave-skip-errors    29.3 日常管理维护     29.3.1 查看从服务器状态     29.3.2 主从服务器同步维护     29.3.3 从服务器复制出错的处理     29.3.4 logevententryexceededmax_allowed_packet的处理     29.3.5 多主复制时的自增长变量冲突问题     29.3.6 查看从服务器的复制进度    29.4 切换主从服务器    29.5 小结   第30章 MySQLCluster    30.1 MySQLCluster架构    30.2 MySQLCluster的配置     30.2.1 MySQLCluster的版本支持     30.2.2 管理节点配置步骤     30.2.3 SQL节点和数据节点的配置    30.3 开始使用Cluster     30.3.1 Cluster的启动     30.3.2 Cluster的测试     30.3.3 Cluster的关闭    30.4 维护Cluster     30.4.1 数据备份     30.4.2 数据恢复     30.4.3 日志管理    30.5 小结   第31章 MySQL常见问题和应用技巧    31.1 忘记MySQL的root密码    31.2 如何处理MyISAM存储引擎的表损坏     31.2.1 方法一     31.2.2 方法二    31.3 MyISAM表超过4GB无法访问的问题    31.4 数据目录磁盘空间不足的问题     31.4.1 对于MyISAM存储引擎的表     31.4.2 对于InnoDB存储引擎的表    31.5 DNS反向解析的问题    31.6 mysql.sock丢失后如何连接数据库    31.7 同一台服务器运行多个MySQL数据库    31.8 客户端怎么访问内网数据库    31.9 小结

EXCEL VBA编程进阶

工作簿:讲了工作簿的表达方式,以及批量操作工作簿的数据。比如合并多工作簿数据。 工作表:讲了工作簿的表达方式,以及批量操作工作表的数据。 单元格:单元格是操作频率高的对象,单元格的表达,通过方法或属性获取等。 数组:为了提高VBA的运算速度,特别讲解了数组。以及他的相关应用 图形:这是精彩的部分。讲了图形的各种批量插入方式。通过坐标自动绘制图形。批量制作员工卡等实例。很多实例在工作上都能用到。 财务,数据分析师,想实现办公自动化的人员

相关热词 如何c#按钮透明 c#能跨平台吗 c#中遍历字典 c# 斜率 最小二乘法 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd c# 操作sql视图 java调用c#接口