线程间通信 1全局变量2当前主对话框指针3发消息方式4 AfxBeginThread的返回值(为CWinThread类型的指针)5AfxGetApp



①、最常用的方式:全局变量或者多个线程都能看到的一个东东

1、全局变量方式;

int g_Num = 100;

UINT __cdecl ThreadWriteProc(LPVOID lpParameter)

{

while(TRUE) {

++g_Num;

Sleep(50);

}

return 100;

}

UINT __cdecl ThreadReadProc(LPVOID lpParameter)

{

CString strTipMsg;

while(TRUE) {

strTipMsg.Format(_T("%d"), g_Num);

OutputDebugString(strTipMsg);

Sleep(50);

}

return 100;

}

void CThreadTestDlg::OnBnClickedBtn()

{

CWinThread *pThread = AfxBeginThread(ThreadWriteProc, NULL);

AfxBeginThread(ThreadReadProc, NULL);

}

2、大家都能访问到的一个东东;

3、全局变量的声明方式;

===================================================

②、发消息方式:PostThreadMessage

#define MY_THREAD_MSG (WM_USER+100)

UINT __cdecl ThreadWriteProc(LPVOID lpParameter)

{

int nCount = 0;

DWORD dwThreadReadID = (DWORD)lpParameter;

while(TRUE) {

PostThreadMessage(dwThreadReadID, MY_THREAD_MSG, nCount++, NULL);

Sleep(50);

}

return 0;

}

UINT __cdecl ThreadPrintProc(LPVOID lpParameter)

{

MSG msg = {0};

while(GetMessage(&msg, 0, 0, 0))

{

switch(msg.message) {

case MY_THREAD_MSG:

{

int nCount = (int)msg.wParam;

CString strText;

strText.Format(_T("%d"), nCount);

OutputDebugString(strText);

}

break;

}

}

return 0;

}

void CThreadTestDlg::OnBnClickedBtn()

{

CWinThread *pThreadPrint = AfxBeginThread(ThreadPrintProc, NULL);

CWinThread *pThreadWrite = AfxBeginThread(ThreadWriteProc, (LPVOID)pThreadPrint->m_nThreadID);//

CWinThread::m_nThreadID


当前线程的ID。

}

===================================================

来自为知笔记(Wiz)

时间: 2024-10-22 03:34:46

线程间通信 1全局变量2当前主对话框指针3发消息方式4 AfxBeginThread的返回值(为CWinThread类型的指针)5AfxGetApp的相关文章

C++/MFC线程间通信

1.通过全局变量方式 mfcDlg.cpp 1 int g_num; //全局变量 2 UINT _cdecl ThreadWrite(LPVOID lpParameter) 3 { 4 g_num = 100; 5 while (1) 6 { 7 g_num++; 8 Sleep(50); 9 } 10 return 0; 11 } 12 UINT _cdecl ThreadRead(LPVOID lpParameter) 13 { 14 CString str; 15 while (true

【转】VC 线程间通信的三种方式

原文网址:http://my.oschina.net/laopiao/blog/94728 1.使用全局变量(窗体不适用)      实现线程间通信的方法有很多,常用的主要是通过全局变量.自定义消息和事件对象等来实现的.其中又以对全局变量的使用最为简洁.该方法将全局变量作为线程监视的对象,并通过在主线程对此变量值的改变而实现对子线程的控制.      由于这里的全局变量需要在使用它的线程之外对其值进行改变,这就需要通过volatile关键字对此变量进行说明.使用全局变量进行线程通信的方法非常简单

iOS开发NSOperation 三:操作依赖和监听以及线程间通信

一:操作依赖和监听 #import "ViewController.h" @interface ViewController () @end @implementation ViewController /** * 1:NSOperation的使用:1:先创建队列NSOperationQueue:若不创建队列直接封装任务则默认在当前线程中串行执行任务,其队列分为两种主队列和非主队列,主队列和GCD中的主队列一样[NSOperationQueue mainQueue],而alloc in

线程间通信和线程互斥

线程间通信 1> 线程间通信分为两种 主线程进入子线程(前面的方法都可以) 子线程回到主线程 2> 返回主线程 3> 代码 这个案例的思路是:当我触摸屏幕时,会在子线程加载图片,然后在主线程刷新UI界面 视图布局我就不写了,大家自己来吧,线程间通信代码如下: #pragma mark - 添加响应方法触发创建子线程并加载数据 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

线程间通信的三种方式(NSThread,GCD,NSOperation)

一.NSThread线程间通信 #import "ViewController.h" @interface ViewController ()<UIScrollViewDelegate> @property (strong, nonatomic) IBOutlet UIScrollView *scrollView; @property (weak, nonatomic)  UIImageView *imageView; @end @implementation ViewCo

线程间通信与同步

线程间通信的两个基本问题是互斥和同步. 同步:一个线程的执行依赖于另一个线程的消息. 互斥:对共享资源的排他性,一个线程必须等待别的线程释放公共资源之后才能继续执行. 同步机制(Win32中):事件,信号量,互斥量,临界区 各种同步方式: #全局变量 win32多线程通信的最方式,但用全局变量同步会有两个弊端,应该避免 >主线程没有进入休眠状态,依然会消耗CPU资源 >如果主线程优先级比ThreadFunc高,则全局变量无法在ThreadFunc中被改变,这样线程无法得到通知 #事件 由于ev

Java笔记七.线程间通信与线程生命的控制

线程间通信与线程生命的控制 一.线程通信方法 Java是通过Object类的wait.notify.notifyAll这几个方法来实现进程键的通信.由于所有的类都是从Object继承的,因此在任何类中都可以直接使用这些方法. wait:告诉当前线程放弃监视器并进入睡眠状态,知道其他线程进入同一监视器并调用notify为止; notify:唤醒同一对象监视器中调用wait的第一个线程.用于类似饭馆有一个空位后通知所有等候就餐的顾客中的第一位可以入座的情况: notifyAll:唤醒同一对象监视器中

线程间通信机制posix匿名信号量

信号量分为两种 一种是简单的信号量,另一种是用于进程间通信的信号量集. 简单的信号量 属于POSIX标准的信号量; 从信号量的命名来看,信号量又可分为命名信号量和匿名(未命名)信号量; 从信号量的值来看,信号量可分为二进制信号量和计数信号量; 1.匿名信号量和命名信号量: 匿名信号量是在内存中分配内存.进行初始化并由系统API进行管理的,它可以在多个线程之间进行资源同步,也可以在多个进程之间进行资源同步,这主要是看在初始化的时候给pshared传递的参数值,为0,则在线程之间同步,非0,则在进程

进程间通信和线程间通信

进程间通信: # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系通常是指父子进程关系.# 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信.# 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问.它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源.因此,主要作为进程间以及同一进程内不同线程之间的同步手段.#