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

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

В дочернем процессе я перегружаю метод 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
05.03.2014, 15:47
    #38579143
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посылка сообщения дочернему потоку qt
mr_virtus,

UINT MyMessage = RegisterWindowMessage(L"MY_MESSAGE");

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

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

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



в момент получения и обработки сообщения.
...
Рейтинг: 0 / 0
05.03.2014, 15:52
    #38579156
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посылка сообщения дочернему потоку qt
у меня два процесса: родительский и дочерний. В родителе сообщение посылаю так:
Код: 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
05.03.2014, 15:58
    #38579173
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посылка сообщения дочернему потоку qt
MasterZiv,
авторТакже подумай про валидность указателей, на которые указывают параметры:

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


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