
VC++多线程
文章平均质量分 68
leillon
晴方好,雨亦奇
展开
-
使用PostThreadMessage 与线程进行大数据量的通讯
PostThreadMessage是一个线程体发送一个消息到指定的线程ID,其原型如下:BOOL PostThreadMessage( DWORD idThread, UINT Msg, WPARAM wParam,转载 2012-01-23 14:52:15 · 1014 阅读 · 0 评论 -
MFC上的多线程编程
MFC上的多线程编程 作者:韩耀旭一、问题的提出编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下:v转载 2012-01-23 14:39:56 · 595 阅读 · 1 评论 -
应用程序退出时,临界区回收出错导致的进程异常
应用程序退出时,临界区回收出错导致的进程异常。 问题看起来不是很严重,因为异常仅仅发生在应用程序退出时,此时,即使程序崩溃也没有什么太大的影响。类似问题以前也遇到过,当时由于代码量太多,所以,直接pass。 异常中断时,函数调用栈如下:> XX.exe!AfxCriticalTerm() 行 62C++ XX.exe!_AfxTermAp转载 2012-01-23 14:34:41 · 570 阅读 · 0 评论 -
临界区:多线程同步
对于多线程的程序来说,线程之间的同步永远是个重要的问题。如果多个线程都要存取同样的对象(如存取同样的内存变量或读写同一个文件等),而一个线程操作的结果反过来又会影响另一个线程的运行的时候,同步问题就变得异常重要。产生同步问题的根源在于线程之间的切换是无法预测的,一个线程无法知道什么时候自己的时间片会结束,也无法知道下一个时间片会被分配给哪个线程。事实上,线程可以在任转载 2012-01-23 14:33:41 · 462 阅读 · 0 评论 -
PostMessage函数介绍
PostMessage函数介绍PostMessage(H,WM_SHOWWINDOW,NULL,SW_PARENTCLOSING);ShowWindow(H,SW_HIDE); 函数功能描述:将一个消息放到与指定窗口创建的线程相关的消息队列中,不等线程处理消息就返回。消息队列里的消息通过调用GetMessage或PeekMessage函数而获得。.函数原型: BOOL P原创 2012-02-01 14:20:13 · 1085 阅读 · 0 评论 -
windows多线程编程的经验
windows多线程编程的经验1) 不要在线程函数体内操作MFC控件,不要再线程里面调用UpdateData函数更新用户界面,而应该尽量采用发送消息的方式,在主线程的消息响应函数中操作控件;2)不建议采用SendMessage往主线程发送消息,因为它是同步的,阻塞的,可以考虑采用PostMessage代替;3)线程退出时,尽量不要使用TerminateThread函数,而尽可能原创 2012-02-01 14:20:45 · 304 阅读 · 0 评论 -
如何干掉多线程
如何干掉多线程干掉多线程的目的是为了干掉锁,干掉争用,减少开发的难度及提高系统的稳定性,可理解性,易维护性。以阶段来划分系统的话,有多种划分方法。比如业务意义上的阶段,或模块意义上的阶段。但是这样的划分总是有点画蛇添足的感觉:计算机并不懂业务,它也不懂模块。它什么都不懂。它懂的只有指令。两种指令:内存指令与IO指令。本来这两者都只是处理器的事情,跟我并没有关系。但是IO指令会将线程挂起原创 2012-02-01 14:21:19 · 372 阅读 · 0 评论 -
vc中定时器并非多线程
vc中定时器并非多线程 VC++中timer很容易给人感觉是多线程的。其实不然,他是通过消息触发事件的。。通过SetTimer函数设定定时器后,在规定时间内向消息队列中加入wm_timer消息来触发事件。并且只有该消息返回后才处理下个消息。 可以通过程序来验证。BOOL bThreadEnd = TRUE;UINT ThreadPro(LPVOID pParam);v原创 2012-02-01 14:25:23 · 533 阅读 · 0 评论 -
Win32 多线程的基本使用
Win32 多线程的基本使用Summary:总结Win32提供的创建多线程相关的API接口和基本的使用框架。Ref:MSDN: http://msdn.microsoft.com/zh-cn/library/y6h8hye8(v=VS.100)Win32多线程的创建方法主要有:(1)CreateThread()(2)_beginthread()&&_beginthr原创 2012-02-01 14:25:48 · 327 阅读 · 0 评论 -
多线程的那点儿事
多线程的那点儿事多线程编程是现代软件技术中很重要的一个环节。要弄懂多线程,这就要牵涉到多进程?当然,要了解到多进程,就要涉及到操作系统。不过大家也不要紧张,听我慢慢道来。这其中的环节其实并不复杂。 (1)单CPU下的多线程 在没有出现多核CPU之前,我们的计算资源是唯一的。如果系统中有多个任务要处理的话,那么就需要按照某种规则依次调度这些任务进行处理。什么规则呢?可以是一原创 2012-02-01 14:26:19 · 843 阅读 · 1 评论 -
多线程和多进程的区别
多线程和多进程的区别 一.为何需要多进程(或者多线程),为何需要并发?这个问题或许本身都不是个问题。但是对于没有接触过多进程编程的朋友来说,他们确实无法感受到并发的魅力以及必要性。我想,只要你不是整天都写那种int main()到 底的代码的人,那么或多或少你会遇到代码响应不够用的情况,也应该有尝过并发编程的甜头。就像一个快餐点的服务员,既要在前台接待客户点餐,又要原创 2012-02-01 14:27:05 · 268 阅读 · 0 评论 -
多线程知识点整理
多线程知识点整理基本概念多线程程序在较低的层次上扩展了多任务的概念:一个程序同时执行多个任务,通常,每一个任务称为一个线程,它是线程控制的简称。可以同时运行一个以上线程的程序称为多线程程序。多进程与多线程的区别:每个进程拥有自己的一整套变量,而线程则共享数据。相关接口•Runnable◦ 方法 void run()◦可由Runnable对象构成Thread,不要调用原创 2012-02-01 14:27:53 · 276 阅读 · 0 评论 -
解开 Windows 下的临界区中的代码死锁
Matt Pietrek和Russ Osterlund 下载本文的代码:CriticalSections.exe (415KB)摘要临界区是一种防止多个线程同时执行一个特定代码节的机制,这一主题并没有引起太多关注,因而人们未能对其深刻理解。在需要跟踪代码中的多线程处理的性能时,对 Windows 中临界区的深刻理解非常有用。 本文深入研究临界区的原理,以揭示在查找死锁和转载 2012-02-01 15:55:13 · 403 阅读 · 0 评论 -
SendMessage 和 PostMessage
SendMessage 和 PostMessage1. SendMessage函数要等到消息被处理后才返回 PostMessage 消息发出后马上返回2. PostMessage发向目标窗口的消息一定会进入消息队列 SendMessage向同一线程的窗口发消息,不会进入消息队列, SendMessage向其他线程的窗口发消息,则会进入消息队列,3.原创 2012-02-01 14:22:48 · 381 阅读 · 0 评论 -
了解WaitForSingleObject
DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds);参数hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。如果时间是有信号状态返回WAIT_OBJECT_0,如果时间超过dwMilliseconds值但时间事件还是无信号状态则返回WAIT_TIMEOUT。h转载 2012-01-23 14:43:28 · 242 阅读 · 0 评论 -
CreateEvent和SetEvent及WaitForSingleObject的用法
首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,程锁定方面.CreateEvent函功能描述:创建或打开一个命名的或无名的事件对象.EVENT有两种状态:发信号,不发信号。 SetEvent/ResetEvent分别将EVENT置为这两种状态分别是发信号与不发信号。 WaitForSingleObject()等待,直到参数所指定的OBJE转载 2012-01-23 14:44:43 · 290 阅读 · 0 评论 -
WaitForSingleObject和WaitForMultipleObjects用法
WaitForSingleObject的用法DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds);参数hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。如果时间是有信号状态返回WAIT_OBJECT_0,如果时间超过dwMilliseconds值但时间事件还是无信号状转载 2012-01-23 14:45:35 · 436 阅读 · 0 评论 -
并发思想
从性能的角度看,如果没有任务会阻塞,那么在单处理器机器上使用并发就没有任何意义。线程机制分为:协作式和抢占式。Java的线程机制是抢占式的,这表示调度机制会周期性地中断线程,将上下文切换到另一个线程,从而为每个线程都提供时间片,使得每个线程都会分配到数量合理的时间去驱动它的任务。在协作式系统中,每个任务都会自动地放弃控制,这要求程序员要有意识地在每个任务中插入某种类型的让步语句。协作式转载 2012-01-23 14:50:27 · 801 阅读 · 0 评论 -
CEvent类用法
CEvent 类提供了对事件的支持。事件是一个允许一个线程在某种情况发生时,唤醒另外一个线程的同步对象。事件告诉线程何时去执行某一给定的任务,从而使多个线程流平滑。例如在某些网络应用程序中,一个线程(记为A)负责监听通信端口,另一个线程(记为B)负责更新用户数据。通过使用CEvent类,线程A可以通知线程B何时更新用户数据,这样线程B可以尽快地更新用户数据。每一个CEvent对象可以有两种状态:有转载 2012-01-23 14:48:17 · 399 阅读 · 0 评论 -
CreateThread、_beginthreadex和AfxBeginThread比较和选择
参考1】CreateThread, AfxBeginThread,_beginthread, _beginthreadex的区别 =====================================================================1、CreateThread——Windows的API函数2、_beginthreadex——MS对C Runtime库的扩转载 2012-01-23 14:47:33 · 287 阅读 · 0 评论 -
AfxBeginThread的用法
CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UNT nStackSize = 0, DWORD dwCreateFlags = 0,转载 2012-01-23 14:46:00 · 302 阅读 · 0 评论 -
主线程与用户界面线程(含有消息泵的线程)的通信
vckbase站点上,由一个多线程的demo,讲得是UI线程,如何开启一个UI界面线程.但是里面没有涉及到主线程如何和UI线程间通信.这个问题,我搞了好久.其实很简单,给一个线程发消息 PostThreadMessage(). BOOL PostThreadMessage( DWORD idThread, // thread i转载 2012-01-23 14:39:14 · 514 阅读 · 0 评论 -
使用PostThreadMessage传递消息
PostThreadMessage的原型是这样的BOOL PostThreadMessage( DWORD idThread, UINT Msg, WPARAM wParam, LPARAM lParam);PostThreadMessage可以用于线程之间的异步通讯,因为它不用等待调用者返回,这也许是线程通讯中最简单的一种方法了。但是要注转载 2012-01-23 14:51:56 · 361 阅读 · 0 评论 -
PostThreadMessage的例子
#include #include #include #include #define UM_MSG1 WM_USER+1#define UM_MSG2 WM_USER+2DWORD WINAPI Thread1(LPVOID para){ DWORD dwThreadId = *(DWORD *)para; DWORD i=0;转载 2012-01-23 14:51:39 · 454 阅读 · 0 评论 -
工作线程与主线程的通信
首先声明, 这里的工作线程与UI线程是相对的,即没有任何窗口的. 如果需要与主线程或其它辅助线程通讯,有几种方法如事件,消息,信号等,也可以是以上几种方法的综合运用.下面就列出以下3种通讯方法的代码框架 (1)只用消息通讯 1 DWORD ThreadProc(LPVOID lParam) 2 { 3 //创建线程消息队列 4 MSG转载 2012-01-23 14:49:24 · 373 阅读 · 0 评论 -
线程终止的问题
有两种情况可以使线程结束:控制函数结束或者根本就不允许线程完成,而提前终止它。我们可以想象在WORD中进行后台打印,如果打印结束了,那线程就可以结束了。如果用户中止了打印,那后台打印线程也要终止了。本文将主要介绍对这两种情况的实现,并且介绍如何获得线程的结束代码。对于工作线程,结束它是比较容易的:退出线程函数然后返回一个结束原因的代码就是了。用户可以使用AfxEndThread函数或直接利用r转载 2012-01-23 14:49:00 · 288 阅读 · 0 评论 -
PostThreadMessage用法
函数功能:该函数将一个消息放入 (寄送)到指定线程的消息队列里,不等待线程处理消息就返回。函数原型:BOOL PostThreadMessage(DWORD idThread,UINT Msg,WPARAM wParam,LPARAM IParam);参数idThread:其消息将被寄送的线程的 线程标识符。如果线程没有消息队列,此函数将失败。当线程第一次调用一个Win 32 US转载 2012-01-23 14:48:39 · 1028 阅读 · 0 评论 -
关于_beginthreadex、CreateThread、AfxBeginThread的选择
:《Win32多线程程序设计》第219页中间:不要在一个MFC程序中使用_beginthreadex()或CreateThread()。 我的程序中使用的CString/CArray等MFC类,是否我只能使用AfxBeginThread()? 2:我的程序使用了一个库,里面用到了很多memcpy/memmove/fopen/fread等函数。 这些函数应该算是C R转载 2012-01-23 14:47:56 · 292 阅读 · 0 评论 -
AfxBeginThread的介绍
AfxBeginThread 用户界面线程和工作者线程都是由AfxBeginThread创建的。现在,考察该函数:MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另一个用于工作者线程,分别有如下的原型和过程:用户界面线程的AfxBeginThread 用户界面线程的AfxBeginThread的原型如下:CWinThread* AFXAPI Afx转载 2012-01-23 14:47:01 · 276 阅读 · 0 评论 -
AfxBeginThread的一个例子
//这是一个多线程控制进度条的例子,很简单,但是对于初学者掌握多线程的实现方法是非常硬手的。//重点是AfxBeginThread的用法,////// MultiThread5Dlg.cpp : implementation file//#include "stdafx.h"#include "MultiThread5.h"#include "MultiThread转载 2012-01-23 14:46:24 · 323 阅读 · 0 评论 -
多线程编程之临界区模式
临界区模式 Critical Section Pattern 是指在一个共享范围中只让一个线程执行的模式。它是所有其它多线程设计模式的基础,所以我首先来介绍它。把着眼点放在范围上,这个模式叫临界区模式,如果把作眼点放在执行的线程上,这个模式就叫单线程执行模式。 首先我们来玩一个钻山洞的游戏,我 Axman,朋友 Sager,同事 Pentium4.三个人在八角游乐场循环钻山洞(KAO,减肥训转载 2012-02-01 15:53:39 · 455 阅读 · 0 评论