社区
进程/线程/DLL
帖子详情
求教:两个程序之间的通信问题
fanlin00428
2005-07-19 11:21:59
有两个可执行程序:第一个程序每秒产生一个字符串,第二个是一个客户端发送程序。我需要将第一个程序产生的字符串,通过第二个程序实时的发送出去。请问:1.如何把产生的字符串传递个发送程序(每秒产生一个字符串,同时传递给第二个程序)?2.用什么方法比较可行(管道,消息,共享内存,socket...)?3.如何实现,请写出一点简单代码,或提供一点相关信息、网址。
请不吝赐教,高分酬谢,顶者有分!
...全文
270
11
打赏
收藏
求教:两个程序之间的通信问题
有两个可执行程序:第一个程序每秒产生一个字符串,第二个是一个客户端发送程序。我需要将第一个程序产生的字符串,通过第二个程序实时的发送出去。请问:1.如何把产生的字符串传递个发送程序(每秒产生一个字符串,同时传递给第二个程序)?2.用什么方法比较可行(管道,消息,共享内存,socket...)?3.如何实现,请写出一点简单代码,或提供一点相关信息、网址。 请不吝赐教,高分酬谢,顶者有分!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
AntonlioX
2005-07-21
打赏
举报
回复
还可以用 套接字 进程间通讯
skykeen
2005-07-21
打赏
举报
回复
mark
cryptonym
2005-07-21
打赏
举报
回复
管道比套结子更快。
Kudeet
2005-07-20
打赏
举报
回复
http://www.yesky.com/42/1720542.shtml
fanlin00428
2005-07-20
打赏
举报
回复
谢谢各位,烦请哪位介绍一下共享内存的方法。
linur
2005-07-20
打赏
举报
回复
可用管道, 转一篇文章:
本文将在VC++环境下介绍一个父进程和其子进程的通信实例。在父进程Parent窗口中按一下鼠标左键,就会产生一个管道(Pipe)并启动子进程Child,且从(Pipe)一端发送信息,同时Child启动后会创建一个工作线程,专门用来从管道的另一端读入数据。父进程通过菜单项的控制来改变图形形状参数,并传给Child使之在自己的窗口中绘出响应的图形。下面分别就父进程Parent和子进程Child来进行说明。
父进程Parent
在父进程Parent中,我们将创建管道和启动子进程。首先说明几个相关函数。
创建进程函数:
BOOL CreateProcess(
LPCTSTR lpApplicationName, //应用模式指针
LPTSTR lpCommandLine, // 命令行字符串
LPSECURITY_ATTRIBUTES lpProcessAttributes,
// 进程安全性指针
LPSECURITY_ATTRIBUTES lpThreadAttributes,
// 主线程安全性指针
BOOL bInheritHandles,// 是否继承句柄
DWORD dwCreationFlags,// 进程类型与优先级
LPVOID lpEnvironment,// 环境块指针
LPCTSTR lpCurrentDirectory,// 当前目录
LPSTARTUPINFO lpStartupInfo,
// STARTUPINFO结构指针
LPPROCESS_INformATION lpProcessInformation);
// 新进程信息
创建管道函数:
BOOL CreatePipe(
PHANDLE hReadPipe, // 读句柄变量地址
PHANDLE hWritePipe,// 写句柄变量地址
LPSECURITY_ATTRIBUTES lpPipeAttributes,
// 安全属性指针
DWORDnSize );//管道缓冲区大小
写管道函数:
BOOL WriteFile(
HANDLE hFile;//写入文件句柄
LPCVOID lpBuffer;//写入数据指针
DWORD nNumberOfBytesToWrite;
//要写入字节数量
LPDWORD lpNumberOfBytesWritten;
//已写入字节数地址
LPOVERLAPPED lpOverlapped );
//异步I/O结构指针
下面从编程角度讨论其实现步骤:
1.利用AppWizard(EXE)产生Parent应用框架,然后在文件Parentview.cpp头部加入#in clude<global.h>,其中文件global.h定义了两个进程用于相互通信的结构和常量值。代码如下:
Global.h 共享变量头文件:
typedef struct Figure
{int iShape;// 图形控制参数
} FIGURE,*PFIGURE;
#define ID_RECT 32771
#define ID_ELLIPSE 32772
#define ID_TERMINATE 32773
2.使用ClassWizard工具:选择对应于CParentView类的消息WM_LBUTTONDOWN,选择AddFu nction键,增加函数OnLButtonDown()。在主菜单资源中加入Rect、Ellipse、Terminate菜单项,ID分别为IDC_RECT、IDR_ELLIPSE、IDR_TERMINATE,并在ClassWizard中加入相应函数。
在文件Parentview.h中加入如下代码:
public:
BOOL SendCommand();//发送信息
HANDLE hProcess; //进程句柄
HANDLE hpipeWrite; //管道写句柄
FIGURE figure;
本文给出Parentview.cpp的部分程序代码。
编者注:源代码发表在:http://www.computerworld.com. cn/98/skill/default. htm。
子进程Child
Child启动之后,立刻创建一个新的线程,并在新线程中执行读管道操作,利用读得的参数使主窗口绘出形状。读管道函数为:
BOOL ReadFile(
HANDLE hFile,// 读入文件句柄
LPVOID lpBuffer, // 读入数据缓冲区地址
DWORD nNumberOfBytesToRead;
// 要读入字节数量
LPDWORD lpNumberOfBytesRead,;
// 已读入字节数地址
LPOVERLAPPED lpOverlapped );
// 异步I/O结构指针
首先,从MFC类库中创建新线程,使用ClassWizard工具:选择AddClassNew,输入类名CT hr,在基类列表框中选择“CWinThread",按下Create按钮,生成线程类CThr。然后修改程序代码。本文给出部分源程序。
结论
运行本文例程,在父进程Parent窗口中按一下鼠标左键,就会产生一个Pipe并启动子进程Child;在Parent中选中菜单项Rect或Ellipse时,Child窗口中就会分别绘出矩形和椭圆;选中Terminate时,就会中断通信。以上介绍的是匿名管道,若要增加通信的灵活性还可采用命名管道NamedPipe,读者可尝试实现。
ForTopLevel
2005-07-20
打赏
举报
回复
可以用共享内存,简单点说共享内存就像一个存在于内存中的文件,可以被任何已知句柄的进程访问,但是看你的数据量不大,用WM_COPYDATA消息是不是更好呢?
oyljerry
2005-07-19
打赏
举报
回复
数据量比较少,就用简单的WM_COPYDATA等好了,使用简单
Kudeet
2005-07-19
打赏
举报
回复
使用WM_COPYDATA:
CString str = _T( "Hello" );
HWND hWndReceived = FindWindow( "Receiver", NULL );
COPYDATASTRUCT cpd;
cpd.dwData = 0;
cpd.cbData = strDataToSend.GetLength();
cpd.pData = (void*)str.GetBuffer(cpd.cbData);
SendMessage( hWndReceived, WM_COPYDATA, 0, (LPARAM) & cpd );
str.ReleaseBuffer();
加入映射宏:
BEGIN_MESSAGE_MAP(CMyWnd, CWnd)
//{{AFX_MSG_MAP(CMyWnd)
...
ON_WM_COPYDATA()
...
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
...
映射函数:
BOOL CMyWnd::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
CString strRecievedText = (LPCSTR) (pCopyDataStruct->lpData);
return CMyWnd::OnCopyData(pWnd, pCopyDataStruct);
}
smartcomplier
2005-07-19
打赏
举报
回复
为什么用两个程序呢?
用两个线程不好吗?
fanlin00428
2005-07-19
打赏
举报
回复
另:字符串大小不定,小于1K
传感器i2c与arduino连接_
求教
大佬关于UNO r3和I2C
通信
的传感器的
问题
如题,我在智能小车的制作中加入了
两个
TOF10120传感器,但是因为
通信
方式都是I2C
通信
,且他俩的地址相同,因此不知道该如何去做下一步的编程工作;我想了
两个
方案:一个是通过v5扩展板提供的另一个I2C线来供另一个...
QT实现TCP
通信
的小
问题
本人大四做毕设时需要QT实现TCP
通信
,目前
程序
通过相关参考已经编好,在自己PC上打开
两个
进程也可以实现相应功能;但是当将该
程序
用
两个
PC(这
两个
PC已接入局域网)分别运行时,一个作为服务器、一个作为客户端运行...
linux网络编程:用C语言实现的聊天
程序
(同步
通信
)
http://blog.chinaunix.net/space.php?uid=8196371&do=blog&id=1641031通过TCP协议,用C语言实现的同步聊天
程序
,注释写的比较详细,个人觉得对字符串处理比较充分,能够正常编译运行,拿出来和大家分享一下!...
2021 Java面试真题集锦
44 7、一个对象的
两个
方法加 SYNCHRONIZED,一个线程进去SLEEP,另一个线程可以进入到另一个方法吗? 44 8、什么是可重入锁(REENTRANTLOCK)? 44 9、创建线程的三个方法是什么? 45 10、JAVA 怎么获取多线程的...
Linux网络编程:基于TCP的
程序
开发回顾篇
基于TCP的
程序
开发分为服务器端和客户端两部分,常见的核心步骤和流程: 其实按照上面这个流程调用系统API确实可以完全实现应用层
程序
的开发,一点
问题
没有。可随着时间的推移,你会觉得这样子的开发毫无激情。为...
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章