Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.26;
Скачать: CL | DM;

Вниз

MessageDlg в дополнительном потоке   Найти похожие ветки 

 
Bel ©   (2003-05-14 17:17) [0]

Мастера, разъясните ситуацию, плиз.
Одной из частей моей проги является почтовый робот. Я его сделал в дополнительном потоке. Там могут выскакивать всякие сообщения для пользователя. Эти сообщения вызываются в контексте дополнительного потока. На моём компе (Win98) всё нормально. А на другом (Win2000 или XP) выдаёт "неправильный дескриптор окна". Попробовал одно сообщение сделать в контексте основного потока (через Syncronize), прошло нормально. Получается, что в NT-системах сообщения надо выводить в контексте основного потока? Или я что-то не так понял? Может, как-то это можно обойти, а то неохота на каждый MessageDlg писать свою процедуру (у всех разные кнопки, значки).


 
Reindeer Moss Eater   (2003-05-14 17:22) [1]

Это касается любой ОС. Только основной поток.


 
Serginio   (2003-05-14 17:25) [2]

Вообще при работе с потоками для разного рода "сообщения для пользователя" лучше работать через PostMessage когда приложение сочтет нужным обработать очередь сообщений.


 
Bel ©   (2003-05-14 17:27) [3]

А почему же тогда 98-й не ругался?


 
Bel ©   (2003-05-14 17:33) [4]

> Serginio (14.05.03 17:25)

По-моему это не совсем то. Мне же нужны информационные сообщения для пользователя, а PostMessage посылает системные сообщения окнам. Юзер должен прочитать сообщение, нажать кнопку, и программа после этого может дальше идти.


 
vuk ©   (2003-05-14 17:34) [5]

to Bel:
Используйте MessageBox из WinAPI.


to Reindeer Moss Eater:
>Это касается любой ОС. Только основной поток.
ОС ни при чем. Это проблемы VCL.


 
Reindeer Moss Eater   (2003-05-14 17:35) [6]

А почему же тогда 98-й не ругался?

Случайное стечение обстоятельств.


 
Reindeer Moss Eater   (2003-05-14 17:38) [7]

ОС ни при чем. Это проблемы VCL.

Очень даже при чем.


 
Bel ©   (2003-05-14 17:39) [8]

> vuk © (14.05.03 17:34)
> Используйте MessageBox из WinAPI.

А он не страдает такой проблемой? Хорошо, попробую. Это даже лучше, он надписи на кнопках пишет по русски.


 
vuk ©   (2003-05-14 17:45) [9]

to Reindeer Moss Eater:
>Очень даже при чем.
Повторяю еще раз. Проблема в VCL и только в VCL. Окна в отдельных потока живут со страшной силой.

to Bel:
>А он не страдает такой проблемой?
Не страдает.

>Это даже лучше, он надписи на кнопках пишет по русски.
Вот-вот. :o)


 
Reindeer Moss Eater   (2003-05-14 17:46) [10]

vuk ©
Кроме того:
Читаем внимательно. У чела одна программа и разные ос.
Я ему сказал, что основной поток надо использовать (в этой его программа) в любой ОС.
И повторяю сказанное. Даже если это проблема VCL.


 
vuk ©   (2003-05-14 18:02) [11]

MessageBox работает в любом потоке (т.к. не VCL-ный).


 
vuk ©   (2003-05-14 18:06) [12]

Про предыдущее сообщение.

Это я в смысле, что проверил и подтверждаю, что работает. :o)


 
Bel ©   (2003-05-15 10:33) [13]

> vuk ©

Большое спасибо, получилось через Application.MessageBox (он всё равно вызывает апишный MessageBox).
Вот только в одном месте всё равно придётся использовать MessageDlg через Syncronize, т.к. мне нужна кнопка YesToAll, а у MessageBox её нет.


 
Alexander1966 ©   (2003-05-15 13:49) [14]

Для корректной работы нескольких потоков с VCL ,
при создании потоков используй BeginThread.



Страницы: 1 вся ветка

Текущий архив: 2003.05.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
11-83429
Kirill
2002-08-18 11:34
2003.05.26
Горячие клавиши для меню


1-83491
AstraS
2003-05-15 17:08
2003.05.26
QReport


4-83807
Ocean
2003-03-25 11:14
2003.05.26
CreateProcess под ХР


4-83796
MUHAMOR
2003-03-24 08:10
2003.05.26
Класс окна EDIT


3-83402
User_OKA
2003-05-03 11:33
2003.05.26
Locate