Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];

Вниз

поток и MessageDlg...   Найти похожие ветки 

 
Андрей Ваганов   (2002-11-24 17:23) [0]

Привет Господа!
Беспокою я Вас по такому вопросу:
Создаю поток в котором совершаются некоторые действия:

function ABC(P:pointer):THandle;stdcall;
var
DC:HDC;
begin
DC:=GetDC(Form1.Handle);
. . . .
. . . .
. . . .
ReleaseDC(Form1.Handle,DC);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
hThread,ThreadID:THandle;
begin
k:=CreateThread(nil,0,@ABC,nil,0,ThreadID);
if hThread=0 then
MessageDlg("Лажа с потоком!",mtError,[mbOK],0);
end;

В зависимости от результатов этих действий нужно предложить пользователю
выбрать следующий шаг действий (в томже потоке) используя MessageDlg.
Проблема в том, что в Debug Time работает а в Run Time нет.
Подскажи пожалйуста в чем проблема и как быть в таком случае?
P.S. Поток используется т.к. объем обрабатываемых данных велик.

Заранее благодарю за ответ.
______________
С Уважением Ваганов Андрей


 
Anatoly Podgoretsky   (2002-11-24 17:27) [1]

hThread имеет случайное значение


 
Андрей Ваганов   (2002-11-24 17:49) [2]

Спасибо за ответ!
я это дело подозревал, но как быть в данной ситуации?


 
MBo   (2002-11-24 17:54) [3]

CreateThread дает handle переменной k. hThread неинициализирована


 
Anatoly Podgoretsky   (2002-11-24 18:01) [4]

Андрей Ваганов (24.11.02 17:49)
Это только тебе известно, что ты собирался делать с этой переменной.


 
Андрей Ваганов   (2002-11-24 18:07) [5]

Извените за оплошность, но k:THandle;-глобально объявлена(разве только if hThread=0 then MessageDlg("Лажа с потоком!",mtError,[mbOK],0); работать не будет но это не важно).
Главное то, что вылазит лажа типа:
Project X raised exception class EInvalidOperation with message "Canvas does not allow drawing". Process stopped. Use step or run to continue.
...причем тут канвас?


 
Андрей Ваганов   (2002-11-25 13:35) [6]

...есть ещё мнения?


 
esu   (2002-11-25 14:31) [7]


Indicates the number of times the canvas has been locked to prevent interference from other threads.

Delphi syntax:

property LockCount: Integer;

C++ syntax:

__property int LockCount = {read=FLockCount, nodefault};

Description

Read LockCount to determine whether the canvas is locked. Whenever the Lock method is called to block other threads from interfering with the canvas, LockCount increases. Whenever the Unlock method is called at the end of a critical section, LockCount decreases. When LockCount is 0, other threads may draw on the canvas.


Видимо так :)


 
Lord Warlock   (2002-11-25 14:37) [8]

Насколько я помню, все попытки запускать в потоках показ диалогов у меня закончился примерно с то-же ошибкой. Визуальные контроли (то бишь формы) нужно создавать в контексте потока, а MessageDlg является общей для приложения и не может работать одновременно в нескольких.


 
Lord Warlock   (2002-11-25 14:39) [9]

Или использовать критические секции как написал esu ©25.11.02 14:31)


 
Андрей Ваганов   (2002-11-25 14:48) [10]

2 Lord Warlock
Извените за нахальность, но будте добры чуть подробнее!!!!
...ну очень надо!
Заранее Благодарю.
2 esu
Благодарю! Ща проверю.


 
Marcus   (2002-11-25 14:49) [11]

На MessageDlg свет клином не сошелся. Можно и MessageBox APIшный поюзать для разнообразия


 
Андрей Ваганов   (2002-11-25 14:52) [12]

2 Marcus
...ага, тоже способ! СПАСИБО!
Попробую и поделюсь результатами.


 
Lord Warlock   (2002-11-25 15:01) [13]


> Андрей Ваганов (25.11.02 14:48)


Вообще, создание формы внутри потока и применение критических секций (EnterCriticlaSection, LeaveCriticalSection) относится к классу TThread.


 
Victor_Cr   (2002-11-25 15:32) [14]

Посмотри
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1038159487&n=5


 
Андрей Ваганов   (2002-11-25 19:06) [15]

2 Marcus
Все зашибись, на теперь просто exception по такомуто адресу ...
:(
2 esu
Месаги не катят, т.к. надо производить некоторые действия в зависимости от отвнта пользователя прямо в потоке.
Извени за назойливость, но не совсем понятно чё за критические секции. Если можно подробнее.

С Уважением
Андрей Ваганов


 
esu   (2002-11-25 22:43) [16]


> Месаги не катят, т.к. надо производить некоторые действия
> в зависимости от отвнта пользователя прямо в потоке

Ну мало ли чего придумать можно. Можно послать сообщение и суспенднуться, а потом из формы после ответа резюмиться... Еще можно через синзронайз... CS... Если туда обработку сообщений пихнуть то и perform пойдет...



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

Форум: "Система";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
1-4961
Checist [root]
2003-01-26 23:33
2003.02.03
Перехват ошибки


14-5157
NewGuest
2003-01-16 21:36
2003.02.03
Люди! Подскажите в чём ошибка при установке RX компанентов...


14-5186
Дмитрий К.К.
2003-01-14 06:14
2003.02.03
Именинники 14 января


14-5265
Усер
2003-01-16 10:54
2003.02.03
А чат создает большой траффик?


1-4901
Anton
2003-01-25 15:54
2003.02.03
Ошибка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский