奔溃中:WaitForSingleObject不起作用!!! 在同一个进程里,可以多次waitfor到同一锁。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 GetLastError看看创建时是否成功了?再确保在wait的时候mutex已经创建了。 Mutex主要用于线程间的互斥访问,可以是不同进程的线程。但你这些按钮都是MFC的UI主线程吧,拥有Mutex的线程是可以多次Wait成功的。CreateThread几个线程,用多线程测一下。 这样啊,那这个WaitForSingleObject还有何意义呢。我的程序在OnTimer函数中和某些消息中要访问一个链表,在消息中可能会删除链表中的节点,而在OnTimer函数中可能又要读到该链中的节点,所以必需要对该链进行保护。要不然,有可能OnTimer中正在读取的节点正好在消息函数中已经删除的。程序奔溃。大神们,给个方案啊。 这样啊,那这个WaitForSingleObject还有何意义呢。我的程序在OnTimer函数中和某些消息中要访问一个链表,在消息中可能会删除链表中的节点,而在OnTimer函数中可能又要读到该链中的节点,所以必需要对该链进行保护。要不然,有可能OnTimer中正在读取的节点正好在消息函数中已经删除的。程序奔溃。大神们,给个方案啊。意义在于在释放线程资源和关闭线程的时候更安全 现在我的程序是由一个主线程来完成的,只是里面有同时来自OnTimer 和系统消息函数对同一资源的操作,这种情况该如何进行保护啊。求大神... 同一个线程中肯定是顺序执行的,这点毋庸置疑。同一个线程中肯定是顺序执行的,这点毋庸置疑。大神,给点指点吧:我就在一个基于对话框程序中做的,在该对话框程序中,有一个Timer,是2秒中执行一次,然后该对话框程序中还接收通讯端发来的消息。在OnTimer函数和通讯消息函数中都操作了同一个数据链表,它都可能在进行读取链表或删除链表。问题来了,如果OnTimer在删除,而消息函数正在读取被删除的节点,程序就崩溃了,所以我必需要有一个能保护链表的操作啊,用了互斥对像还有关键代码段,都不行,这种情况该怎么办才好呢。 同一个线程中肯定是顺序执行的,这点毋庸置疑。同一个线程中肯定是顺序执行的,这点毋庸置疑。大神,给点指点吧:我就在一个基于对话框程序中做的,在该对话框程序中,有一个Timer,是2秒中执行一次,然后该对话框程序中还接收通讯端发来的消息。在OnTimer函数和通讯消息函数中都操作了同一个数据链表,它都可能在进行读取链表或删除链表。问题来了,如果OnTimer在删除,而消息函数正在读取被删除的节点,程序就崩溃了,所以我必需要有一个能保护链表的操作啊,用了互斥对像还有关键代码段,都不行,这种情况该怎么办才好呢。最简单的方案是所有的操作都通过消息的方式发给主线程让主线程去排队和管理 互斥量和临界区都拥有这个特性,就是通一个线程多次进入不会阻塞。你也可以用其他的比如事件。另外这里你的OnTimer只会在主线程执行,你说的消息如果是MFC消息,也自然也是在主线程执行,根本不需要同步,如果是类似回调的在其他线程中执行,互斥量也足够了。同一个线程多次拥有互斥量,只要对应的release掉也不会有问题。当然比较好的选择就是10楼的发送消息,不需要你再同步 VC++ TCP/IP通信线程的问题? MFC,怎样改变拆分窗口的边框颜色? 这个错搞了我2小时了,请帮忙 大家平时写文档都是用什么?是用Doxygen吗? 关于隐藏窗口的问题! 问几个编程的基本问题。 怎么能取得Word的当前文档的路径? vb调用VC写的DLL库的问题 高疯求助---线程中使用定时器的问题 各位:用控件时,弹出对话框-服务器忙-是怎么回事? wlanconnect连接已经保存的ap 如何打开不确定的文件夹下的文件
但你这些按钮都是MFC的UI主线程吧,拥有Mutex的线程是可以多次Wait成功的。
CreateThread几个线程,用多线程测一下。
我的程序在OnTimer函数中和某些消息中要访问一个链表,在消息中可能会删除链表中的节点,而在OnTimer函数中可能又要读到该链中的节点,所以必需要对该链进行保护。要不然,有可能OnTimer中正在读取的节点正好在消息函数中已经删除的。程序奔溃。
大神们,给个方案啊。
我的程序在OnTimer函数中和某些消息中要访问一个链表,在消息中可能会删除链表中的节点,而在OnTimer函数中可能又要读到该链中的节点,所以必需要对该链进行保护。要不然,有可能OnTimer中正在读取的节点正好在消息函数中已经删除的。程序奔溃。
大神们,给个方案啊。
意义在于在释放线程资源和关闭线程的时候更安全
我就在一个基于对话框程序中做的,在该对话框程序中,有一个Timer,是2秒中执行一次,然后该对话框程序中还接收通讯端发来的消息。在OnTimer函数和通讯消息函数中都操作了同一个数据链表,它都可能在进行读取链表或删除链表。问题来了,如果OnTimer在删除,而消息函数正在读取被删除的节点,程序就崩溃了,所以我必需要有一个能保护链表的操作啊,用了互斥对像还有关键代码段,都不行,这种情况该怎么办才好呢。
我就在一个基于对话框程序中做的,在该对话框程序中,有一个Timer,是2秒中执行一次,然后该对话框程序中还接收通讯端发来的消息。在OnTimer函数和通讯消息函数中都操作了同一个数据链表,它都可能在进行读取链表或删除链表。问题来了,如果OnTimer在删除,而消息函数正在读取被删除的节点,程序就崩溃了,所以我必需要有一个能保护链表的操作啊,用了互斥对像还有关键代码段,都不行,这种情况该怎么办才好呢。
最简单的方案是所有的操作都通过消息的方式发给主线程
让主线程去排队和管理
另外这里你的OnTimer只会在主线程执行,你说的消息如果是MFC消息,也自然也是在主线程执行,根本不需要同步,如果是类似回调的在其他线程中执行,互斥量也足够了。同一个线程多次拥有互斥量,只要对应的release掉也不会有问题。
当然比较好的选择就是10楼的发送消息,不需要你再同步