社区
C++ 语言
帖子详情
线程间通信
kim_jinye
2010-04-08 03:27:39
如题。
我现在有一个进程,其中这个进程当中的一个子线程需要向主线程发送数据,需要发送的数据是子线程创建的。请教大家该如何实现?
另外全局变量就不要讨论了,如果是发送消息的话我需要基于postmessage而不是sendmessage,请不要使用mfc。
谢谢大家,在线!
...全文
311
17
打赏
收藏
线程间通信
如题。 我现在有一个进程,其中这个进程当中的一个子线程需要向主线程发送数据,需要发送的数据是子线程创建的。请教大家该如何实现? 另外全局变量就不要讨论了,如果是发送消息的话我需要基于postmessage而不是sendmessage,请不要使用mfc。 谢谢大家,在线!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kim_jinye
2010-04-09
打赏
举报
回复
[Quote=引用 12 楼 xiazai1978 的回复:]
是在windows下还是linux下的?
想到的方法有3个:
线程间的通讯没有进程间通讯那么方便啊
1.pipe,因为是fork继承的,子进程copy了父进程创建的pipe fd
2.socket,socket配合select,可以让父进程等待若干子进程完成任务,并取得最快一个完成任务子进程的运算结果。
3.我很奇怪啊,主线程和子线程的数据是共享的。你为什么不设个flag,子线程完成……
[/Quote]
貌似没懂
kim_jinye
2010-04-09
打赏
举报
回复
人人有分
kim_jinye
2010-04-09
打赏
举报
回复
人人有分
独酌逸醉
2010-04-08
打赏
举报
回复
[Quote=引用 12 楼 xiazai1978 的回复:]
是在windows下还是linux下的?
想到的方法有3个:
线程间的通讯没有进程间通讯那么方便啊
1.pipe,因为是fork继承的,子进程copy了父进程创建的pipe fd
2.socket,socket配合select,可以让父进程等待若干子进程完成任务,并取得最快一个完成任务子进程的运算结果。
3.我很奇怪啊,主线程和子线程的数据是共享的。你为什么不设个flag,子线程完成……
[/Quote]
哥,没听懂。
zwlzhj
2010-04-08
打赏
举报
回复
孙鑫的资料看一下,迎刃而解。
xiazai1978
2010-04-08
打赏
举报
回复
是在windows下还是linux下的?
想到的方法有3个:
线程间的通讯没有进程间通讯那么方便啊
1.pipe,因为是fork继承的,子进程copy了父进程创建的pipe fd
2.socket,socket配合select,可以让父进程等待若干子进程完成任务,并取得最快一个完成任务子进程的运算结果。
3.我很奇怪啊,主线程和子线程的数据是共享的。你为什么不设个flag,子线程完成操作,把flag设为1,主线程每次判断flag为1就读取和子线程共享的数据,这样才是最简单的。
没必要一定要用进程,线程间的通讯吧,简单的,才是最好的。
kim_jinye
2010-04-08
打赏
举报
回复
[Quote=引用 10 楼 liln0530 的回复:]
引用 9 楼 kim_jinye 的回复:
引用 8 楼 liln0530 的回复:
你要发送什么数据就往里面写,如果数据复杂可以放在一个结构体中,然后再放进去当postmessage的参数。postmessage后面两参数都可以带。看下MSDN
postmessage立即返回后,数据就会消亡的
好像这个方法只能传LONG类型的,返回后你的数据就发出去了,不会销毁吧,我试了……
[/Quote]
貌似确实能够收到
liln0530
2010-04-08
打赏
举报
回复
[Quote=引用 9 楼 kim_jinye 的回复:]
引用 8 楼 liln0530 的回复:
你要发送什么数据就往里面写,如果数据复杂可以放在一个结构体中,然后再放进去当postmessage的参数。postmessage后面两参数都可以带。看下MSDN
postmessage立即返回后,数据就会消亡的
[/Quote]
好像这个方法只能传LONG类型的,返回后你的数据就发出去了,不会销毁吧,我试了,得到了发送的数据
kim_jinye
2010-04-08
打赏
举报
回复
[Quote=引用 8 楼 liln0530 的回复:]
你要发送什么数据就往里面写,如果数据复杂可以放在一个结构体中,然后再放进去当postmessage的参数。postmessage后面两参数都可以带。看下MSDN
[/Quote]
postmessage立即返回后,数据就会消亡的
liln0530
2010-04-08
打赏
举报
回复
你要发送什么数据就往里面写,如果数据复杂可以放在一个结构体中,然后再放进去当postmessage的参数。postmessage后面两参数都可以带。看下MSDN
bitxinhai
2010-04-08
打赏
举报
回复
#include<iostream>
using namespace std;
#include<windows.h>
typedef struct _tag_Data
{
CRITICAL_SECTION m_Lock;
int *m_pData;
int m_iDataCount;
_tag_Data()
{
InitializeCriticalSection(&m_Lock);
m_pData = NULL;
m_iDataCount = 0;
}
~_tag_Data()
{
EnterCriticalSection(&m_Lock);
if(m_iDataCount > 0)
{
delete []m_pData;
m_pData = NULL;
}
m_iDataCount = 0;
LeaveCriticalSection(&m_Lock);
DeleteCriticalSection(&m_Lock);
}
}STR_DATA;
UINT ThreadProc(LPVOID pParam)
{
STR_DATA *pData = (STR_DATA *)pParam;
EnterCriticalSection(&pData->m_Lock);
pData->m_iDataCount = 100;
pData->m_pData = new int[100];
for(int i = 0;i < 100;i++)
pData->m_pData[i] = i;
LeaveCriticalSection(&pData->m_Lock);
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
STR_DATA data;
DWORD dwThreadID = 0;
HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE )ThreadProc,(LPVOID)&data,NULL,&dwThreadID);
WaitForSingleObject(hThread,INFINITE);
for(int i = 0;i < data.m_iDataCount;i++)
{
cout<<data.m_pData[i]<<endl;
}
system("pause");
return 0;
}
仅供参考。。。。
kim_jinye
2010-04-08
打赏
举报
回复
[Quote=引用 5 楼 liln0530 的回复:]
postmessage,主线程ID或者接受窗口的句柄作为第一个参数
[/Quote]
需要向主线程发送的数据在子线程中需要如何定义?
liln0530
2010-04-08
打赏
举报
回复
postmessage,主线程ID或者接受窗口的句柄作为第一个参数
flatfoosie
2010-04-08
打赏
举报
回复
有事件模块么?
同意沙发观点
LittleJohny
2010-04-08
打赏
举报
回复
1)PostThreadMessage
2)Pipes
zqlclj
2010-04-08
打赏
举报
回复
创建个消息响应事件,当子线程发送消息是主线程就可以接收了。
liln0530
2010-04-08
打赏
举报
回复
是不是可以创建一个event,让主线程接受这个事件,响应他
鸿蒙中的并发
线程间通信
、
线程间通信
对象
本文聚焦鸿蒙中并发
线程间通信
,介绍了
线程间通信
对象,如普通对象、ArrayBuffer对象等在跨线程时的不同行为。还阐述了ArkTS提供的TaskPool和Worker两种并发能力,以及多种
线程间通信
场景,包括执行独立或多个耗时任务、任务与宿主线程通信等。
线程间通信
的几种实现方式
本文详细介绍了五种
线程间通信
的方式,包括使用volatile关键字、Object类的wait()和notify()方法、CountDownLatch、ReentrantLock结合Condition以及LockSupport,通过实例展示了不同通信机制的特点和用法。
线程间通信
方式
本文介绍了三种
线程间通信
的方法:使用全局变量、消息及CEvent类实现。通过实例展示了如何利用这些方法进行线程间的数据传递。
iOS
线程间通信
本文深入探讨了
线程间通信
的概念及其在进程内的应用,详细介绍了三种常见的通信方式:NSThread、GCD和NSMachPort,展示了如何使用这些方法在不同线程间传递数据,确保应用程序的高效运行。
线程间通信
是什么
本文围绕Java
线程间通信
展开,介绍了其基本概念,包括数据交换和同步机制。阐述了常见通信方式,如共享变量、管道流、队列和锁。详细讲解了wait()、notify()和notifyAll()方法的使用,并给出示例。还指出了死锁、饥饿等常见通信问题,强调合理同步可提升程序性能与可靠性。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章