社区
C++ 语言
帖子详情
不用MFC怎么在两个线程中间发送/接收消息?急!
buchanren
2004-12-21 05:08:36
在下比较菜一些。
用CWinThread发送消息到是晓得了。
但抛开MFC怎么在多个线程中间发送,接收消息。
问题较急。望给出代码。
...全文
214
10
打赏
收藏
不用MFC怎么在两个线程中间发送/接收消息?急!
在下比较菜一些。 用CWinThread发送消息到是晓得了。 但抛开MFC怎么在多个线程中间发送,接收消息。 问题较急。望给出代码。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
buchanren
2004-12-22
打赏
举报
回复
首先感谢上面几位的回答!
我正在参照上面beyondtkl(大龙驹)的代码。
有个问题是子线程中等待消息时必须用“轮询”吗?这样很占用系统资源呀!
子线程等待消息有没有其他的办法?
xuzheng318
2004-12-21
打赏
举报
回复
我们利用这些使线程同步化:
互斥器(Mutex)防止多个线程间共享资源,可以在线程间共享;
临界区(Critical)防止多个线程同时访问共享资源,无法进程共享;
信号机(Semaphore)用来限制访问一个共享资源的线成数目;
事件(Event)允许一个线程以不同的方式向一个或者几个线程发信号。
beyondtkl
2004-12-21
打赏
举报
回复
其實你只要注意 處理好邏輯 就ok...
線程 同步的方法很多
比如 使用 Event, 信號量,關鍵代碼蹬
北极猩猩
2004-12-21
打赏
举报
回复
同一进程中的线程共享内存空间,所以任意一个两个县城都能访问到的对象都可以用来进行通信,不过记住在读写时注意同步
24607660
2004-12-21
打赏
举报
回复
如果两个线程都是WORK线程的话,似乎不能通讯,只能用成员变量了
beyondtkl
2004-12-21
打赏
举报
回复
以前寫的一個。。
可以直接運行的。。。
#include <iostream>
#include <windows.h>
using namespace std;
DWORD g_dwWriteTime = 0;
DWORD g_dwReadTime = 0;
DWORD g_dwRead = 0;
DWORD g_dwWrite = 0;
const DWORD WM_CAN_WRITE = WM_USER + 100;
const DWORD WM_CAN_READ = WM_USER + 101;
DWORD WINAPI WriteThread(LPVOID lpVoid)
{
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
if (msg.message == WM_CAN_WRITE)
{
cout << "write #" << ++g_dwWriteTime << " TIMES " << endl;
int* pArray = (int*)lpVoid;
for (int i=0; i<20; i++)
{
pArray[i] = i;
cout << "write in #" << i << endl;
}
PostThreadMessage(g_dwRead,
WM_CAN_READ,
0,
0);
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
DWORD WINAPI ReadThread(LPVOID lpVoid)
{
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
if (msg.message == WM_CAN_READ)
{
cout << "read #" << ++g_dwReadTime << " TIMES " << endl;
int* pArray = (int*)lpVoid;
for (int i=0; i<20; i++)
{
cout << "read in #" << pArray[i] << endl;
}
PostThreadMessage(g_dwWrite,
WM_CAN_WRITE,
0,
0);
}
}
return msg.wParam;
}
void main()
{
int nArray[20];
HANDLE hRead, hWrite;
hWrite = CreateThread(NULL,
0,
WriteThread,
nArray, // NULL
0,
&g_dwWrite);
hRead = CreateThread(NULL,
0,
ReadThread,
nArray, // NULL
0,
&g_dwRead);
BOOL fPost;
fPost = PostThreadMessage(g_dwWrite,
WM_CAN_WRITE,
0,
0);
char szErr[30];
DWORD dwErr;
while (!fPost)
{
fPost = PostThreadMessage(g_dwWrite,
WM_CAN_WRITE,
0,
0);
dwErr = GetLastError();
szErr[30] = 0;
if (dwErr != 0)
{
wsprintf(szErr, "MainThread Error ID #%d", dwErr);
cout << szErr << endl;
}
else
{
fPost = TRUE;
}
}
Sleep(5000);
PostThreadMessage(g_dwWrite,
WM_QUIT,
0,
0);
PostThreadMessage(g_dwRead,
WM_QUIT,
0,
0);
/*HANDLE hAll[] = {hWrite, hRead};
WaitForMultipleObjects(2,
hAll,
TRUE,
INFINITE);*/
CloseHandle(hWrite);
CloseHandle(hRead);
cout << "write times " << g_dwWriteTime \
<< " read times " << g_dwReadTime << endl;
system("pause");
}
buchanren
2004-12-21
打赏
举报
回复
to: shoooo
是同进程中的多线程。
beyondtkl
2004-12-21
打赏
举报
回复
不要有 消息循環 給你看看。。
shoooo
2004-12-21
打赏
举报
回复
同进程中的多线程还是不同进程?
yevv
2004-12-21
打赏
举报
回复
呵呵 定义一个 全局变量 进行简单的通信 哈哈
MFC
关于自定义
消息
(
线程
给主窗口发
消息
)(主窗口给
线程
发
消息
)实例
前言 老听公司的老哥们说
MFC
基于
消息
机制什么的巴拉巴拉一大堆,实际上自己并没有真真用过,每次看讲解什么的也是一知半懂,像我这种半路出家的,不遇到实际问题根本就搞不懂.由于目前做到公司的项目,按照需求,需要用到
消息
机制,索性就一次搞个明白 我理解的信号就是当
线程
或主
线程
执行完某一步,需要把当前执行的结果反馈给主
线程
或
线程
,这时候通过一个
消息
符号(自定义),该
消息
符号约定了具体做什么(
接收
到该信...
MFC
--自定义
消息
的
发送
与
接收
的方法实现
MFC
--自定义
消息
的
发送
与
接收
的方法实现 以下用一个自创的对话框类(MyMessageDlg)向视图类(MessageTestView)
发送
自定义
消息
为例,说明这两种不同方法的自定义
消息
的
消息
传递的方法一:使用ON_MESSAGE 使用ON_MESSAGE响应
消息
,必须配合定义
消息
#define WM_MY_MESSAGE (WM_USER+100) 对
MFC
多
线程
及
线程
同步
一、
MFC
对多
线程
编程的支持
MFC
中有两类
线程
,分别称之为工作者
线程
和用户界面
线程
。二者的主要区别在于工作者
线程
没有
消息
循环,而用户界面
线程
有自己的
消息
队列和
消息
循环。 工作者
线程
没有
消息
机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面
线程
一般用于处理独立于其他
线程
执行之外的用户输入,响应用户及系统所产生的事件和
消息
等。但对于Win32的A
MFC
多
线程
的创建
利用
MFC
可以创建两种
线程
,分别称之为工作
线程
和用户界面
线程
。二者的主要区别在于工作者
线程
没有
消息
循环,而用户界面
线程
有自己的
消息
队列和
消息
循环。工作者
线程
没有
消息
机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面
线程
一般用于处理独立于其他
线程
执行之外的用户输入,响应用户及系统所产生的事件和
消息
等。 工作
线程
的创建 创建工作
线程
分为三步:(1)
线程
函数的声明(2)
线程
函数的实现(3)创建(启动)
线程
(1)
线程
函数的声明:
线程
函数的声明必须在类外声明,格式如下: UINT
C++
MFC
深入详解之----
线程
通过PostMessage
发送
消息
(自定义
消息
)
我们举一个例子: 点击按钮创建
线程
,并把字符串显示在编辑框中 按钮ID:IDC_BUT_CreateThread Edit编辑框ID:IDC_ShowStr 首先第一步:(第一步都是在xxxxDlg.h文件中) 1.在 xxxxDlg.h文件中定义
消息
(xxxxDlg.h中xxxx是创建时自己起的名字) 添加:#define WM_MY_MESSAGE (WM_USER+100)...
C++ 语言
64,444
社区成员
250,627
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章