![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте, мне в программе необходимо запускать функцию несколько раз, каждый раз в новом потоке, потоки должны работать одновременно, потоков может быть очень много.
Делаю так: Код:
Всё работает, очень даже хорошо. Вопрос в следующем: как быть с функцией, которой нужно передать 2 или более параметров? Например: MyProcedure(a:integer; b:string; c:TDateTime); Как через BeginThread передать функции 2 или более параметров? Последний раз редактировалось ZXCCXZ, 01.06.2011 в 17:06. |
#2
|
||||
|
||||
![]() через параметр Parameter: Pointer; можно передать все что хочешь. сделай его указателем на record.
Пишу программы за еду. __________________ |
#3
|
|||
|
|||
![]() Цитата:
|
#4
|
|||
|
|||
![]() А именно пробовал так:
Код:
Ошибка следующая: [Error] Unit1.pas(50): Invalid typecast Последний раз редактировалось ZXCCXZ, 01.06.2011 в 17:14. |
#5
|
||||
|
||||
![]() Код:
Пишу программы за еду. __________________ |
#6
|
|||
|
|||
![]() Однако есть проблема. Каждый раз при вызове функции передаются разные параметры. У вас переменная r объявлена глобальной и получается при одновременном выполнении нескольких экземпляров функции - они все используют одну переменную r. Мне нужно чтобы каждый раз функция запускалась в новом потоке с новыми параметрами (например как я писал Random(5) ).
Пробовал сделать переменную r локальной для процедуры клика на кнопке(procedure TForm1.Button1Click(Sender: TObject) ![]() |
#7
|
||||
|
||||
![]() ну не проблема:
Код:
CloseHandle(FHandle); для всех потоков сам куда-нить воткнешь, я забыл про них совсем))) Пишу программы за еду. __________________ Последний раз редактировалось NumLock, 02.06.2011 в 08:47. |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
harbor (05.05.2013)
|
#8
|
|||
|
|||
![]() Я вот не понимаю, а чем стандартный TThrad не годится. По сути он делает все тоже самое. но предоставляет некоторый дополнительный сервис, не сильно перегружающий отдельный поток, но дающий простые способы для выполнения часто применяемых действий (синхронизация, автоматическое закрытие хэндлов и т.д).
А Винда вообще не любит очень много потоков, так что в их кол-ве ты не сильно выиграешь, отказавшись от TThread. Вообще, рекомендую задуматься о пуле потоков. |
#9
|
||||
|
||||
![]() lmikle, надеюсь последнее примечание ко мне не относится, я всего лишь следую теме аватара "Создание потока с помощью BeginThread"?
![]() Пишу программы за еду. __________________ |