关于进程间通讯的问题。请各位大侠帮忙。

failinlove 2004-05-12 10:22:28
int main(int argc, char* argv[])
{
// Read the shared memory per seconds
SetTimer(NULL, 0, (1 * 1000), (TIMERPROC)TimerProc);
MSG Msg;
while(::GetMessage(&Msg, NULL, 0, 0)){
if(WM_QUIT == Msg.message){
cout << "WM_QUIT" << " quit" << endl;
return 0;
}
::DispatchMessage(&Msg);
}
// ::WaitForSingleObject(m_hThread, 5 * 1000);
KillTimer(NULL, 0);

return 0;
}

上面是一个Console程序的main函数,里面有一个消息循环,我现在需要在另外一个程序中结束这个程序,比如从另外一个程序中发送一个WM_QUIT消息给他,我现在能取得该Console的ID和句柄,然后用::SendMessage((HWND)hOru, WM_QUIT, 1, 0);向该程序发送消息,但是该Console却接收不到该消息。请各位帮忙出出注意,急啊!!谢谢了。
...全文
32 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
failinlove 2004-05-13
  • 打赏
  • 举报
回复
谢谢 enoloo(行者无疆) 我尝试了一下好像还是不行的。是不是就没有办法了呢,只有用TerminateProcess()来结束他了的。
shootingstars 2004-05-13
  • 打赏
  • 举报
回复
你的程序犯了一个严重的错误。。。导致你肯定无法打印cout << "WM_QUIT" << " quit" << endl;
因为当GetMessage获得WM_QUIT时将会返回NULL,所以无法往下执行While循环体中的语句。

下面是我的测试程序,测试通过
ConsoleMessage.c
#include "stdafx.h"
#include "iostream.h"
#include "windows.h"

int main(int argc, char* argv[])
{
MSG Msg;
while(::GetMessage(&Msg, NULL, 0, 0)){
::DispatchMessage(&Msg);
}

printf("Hello World!\n");
char temp;
cin>>temp;
return 0;
}




ConsoleMessageTest.c
#include "stdafx.h"
#include "windows.h"

int main(int argc, char* argv[])
{
PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );

char path[] = "ConsoleMessage.exe";
BOOL ret = CreateProcess(NULL,path,NULL,NULL,FALSE, CREATE_NEW_CONSOLE,NULL,NULL,&si,&pi);
DWORD threadid = pi.dwThreadId;
Sleep(2000);
PostThreadMessage(threadid, WM_QUIT, NULL, NULL);

return 0;
}
MuseIn 2004-05-12
  • 打赏
  • 举报
回复
up
ygzdev 2004-05-12
  • 打赏
  • 举报
回复
Console里面好象不能处理消息循环的,如楼上所说,你用PostThreadMessage试试!是在不行就直接调用函数关闭该程序
enoloo 2004-05-12
  • 打赏
  • 举报
回复
先用
DWORD GetWindowThreadProcessId(
HWND hWnd, // handle to window
LPDWORD lpdwProcessId // process identifier
);返回线程id.
然后用
BOOL PostThreadMessage(
DWORD idThread, // thread identifier
UINT Msg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
我也没试过,试试吧。
shootingstars 2004-05-12
  • 打赏
  • 举报
回复
使用PostThreadMessage发送消息。
failinlove 2004-05-12
  • 打赏
  • 举报
回复
请帮忙啊。呵呵。

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧