Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

потоки

9.3K
05 декабря 2006 года
Toxa-86
33 / / 04.12.2006
граждане, кто может подсказать как создавать и работать с потоками, напишите пжалста, поподробнее, сразу спасиба!!!:D
17K
05 декабря 2006 года
DeBUGGeR
10 / / 01.09.2006
блин.... в делфи потоки мутяться не так сложно... но я помню столкнулся с проблемами при глобальных переменных.... создаються -> File->New->Other->Thread Object ... потом указываешь название класса...
а в методе Execute пишешь что должно выполняться с потоками....
из программы создаешь поток.... и т.д.
короче поподробнее не объяснить, но если срочно надо, то пиши потоки на WinAPI (быстрее будет, ИМХО):
пишется так:
 
Код:
var
  ID: Cardinal;
  ThreadHandle: THandle;
begin
  ThreadHandle := CreateThread(nil, 0, @Thread, nil, 0, ID);
  SetThreadPriority(ThreadHandle, THREAD_PRIORITY_LOWEST);
end;

@Thread -- адресс на функцию, в которой выполняется что-то (в потоке)
SetThreadPriority(ThreadHandle, THREAD_PRIORITY_LOWEST); - устанавливаем приоретет потоку Low ...

Это был вызов потока... потом пишешь что должно выполняться в потоке, т.е. функцию Thread.... выглядеть должна примерно так:
 
Код:
function Thread(Data : pointer) : integer;
begin
  // Какие-то вычисления и т.п.
end;


Не забудь поставить объявление функции перед
implamentation :-)
вот такое
function NetThread(Data : pointer) : integer;

-------
удачи в это деле )))
261
06 декабря 2006 года
ahilles
1.5K / / 03.11.2005
у TThread есть метод синхронизации
без синхронизации приложение частенько подвисает
16K
07 декабря 2006 года
medved_68
36 / / 06.07.2006
Цитата: ahilles
у TThread есть метод синхронизации
без синхронизации приложение частенько подвисает


Если из треда нет обращения к VCL то и Synchronize не нужен. А подвисать может и по причине одновременного доступа к общим ресурсам разных тредов приложения, если наплевать на механизмы синхронизации ядра.:)

261
07 декабря 2006 года
ahilles
1.5K / / 03.11.2005
обычно чайникам треды нужны для вывода прогресса при выполнении операций с файлами, вот здесь то и вся проблема
5
07 декабря 2006 года
hardcase
4.5K / / 09.08.2005
Цитата: DeBUGGeR
но если срочно надо, то пиши потоки на WinAPI (быстрее будет, ИМХО):
пишется так:
 
Код:
CreateThread(nil, 0, @Thread, nil, 0, ID);


Суперский код. А ты читал документацию к делфи, где написано, что CreateThread ни в коем случае нельзя использовать в явном виде!?
В таком случае ты получаешь кучу "странных" ошибок из-за неверной работы менеджера памяти, который будет всё ещё thread-unsafe.

Для решения этой проблемы в делфи существует функция BeginThread, она переводит менеджер памяти в потокобезопасный режим, создает враппер для дельфийских исключений в новом потоке и вызывает в конце концов CreateThread.

5
07 декабря 2006 года
hardcase
4.5K / / 09.08.2005
Цитата: ahilles
обычно чайникам треды нужны для вывода прогресса при выполнении операций с файлами, вот здесь то и вся проблема


Согласен, просто они не знают, что существует асинхронный ввод-вывод. :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог