powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / посылка сообщения дочернему потоку qt
5 сообщений из 5, страница 1 из 1
посылка сообщения дочернему потоку qt
    #38579113
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте,

хочу послать дочернему процессу сообщение.

В дочернем процессе я перегружаю метод nativeEvent():

in .h:
Код: plaintext
1.
2.
protected:
    virtual bool nativeEvent(const QByteArray &eventType, void *message, long *result);



in .cpp
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
bool MainWindow::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
    UINT MyMessage = RegisterWindowMessage(L"MY_MESSAGE");
    UINT msg = *(reinterpret_cast<UINT*>(message));
    if(msg == MyMessage)
    {
        *result = 0;
        MessageBox(0, L"Got", L"MyMessage", MB_OK);
        return true;
    }
}



Но в таком виде мой процесс не запускается совсем. Зависает при запуске. В чем может быть причина?

Спасибо.
...
Рейтинг: 0 / 0
посылка сообщения дочернему потоку qt
    #38579143
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtus,

UINT MyMessage = RegisterWindowMessage(L"MY_MESSAGE");

делать точно не надо, если ты посылаешь в рамках одного процесса.
...
Рейтинг: 0 / 0
посылка сообщения дочернему потоку qt
    #38579148
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtus,

Также подумай про валидность указателей, на которые указывают параметры:

Код: plaintext
1.
const QByteArray &eventType, void *message, long *result



в момент получения и обработки сообщения.
...
Рейтинг: 0 / 0
посылка сообщения дочернему потоку qt
    #38579156
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня два процесса: родительский и дочерний. В родителе сообщение посылаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
void MainWindow::on_pushButtonSendMessage_clicked()
{
    HWND h = FindWindow(0, L"Child");
    if(h!=0)
    {
        UINT MyMessage=::RegisterWindowMessage(L"MY_MESSAGE");
        if (MyMessage==0)
        {
            MessageBox(0, L"Impossible register message", L"", MB_OK);
            return;
        }
        SendMessage(h, MyMessage, 1, 2);
    }
    else MessageBox(0, L"Can not find you window", L"", MB_OK);
}
...
Рейтинг: 0 / 0
посылка сообщения дочернему потоку qt
    #38579173
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,
авторТакже подумай про валидность указателей, на которые указывают параметры:

имется в виду такая проверка?:
Код: plaintext
1.
2.
3.
if (!message)
 {MessageBox(0, L"info", L"nullPointer", MB_OK};
return;
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / посылка сообщения дочернему потоку qt
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]