потоки
а в методе Execute пишешь что должно выполняться с потоками....
из программы создаешь поток.... и т.д.
короче поподробнее не объяснить, но если срочно надо, то пиши потоки на WinAPI (быстрее будет, ИМХО):
пишется так:
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.... выглядеть должна примерно так:
begin
// Какие-то вычисления и т.п.
end;
Не забудь поставить объявление функции перед
implamentation :-)
вот такое
function NetThread(Data : pointer) : integer;
-------
удачи в это деле )))
без синхронизации приложение частенько подвисает
без синхронизации приложение частенько подвисает
Если из треда нет обращения к VCL то и Synchronize не нужен. А подвисать может и по причине одновременного доступа к общим ресурсам разных тредов приложения, если наплевать на механизмы синхронизации ядра.:)
пишется так:
Суперский код. А ты читал документацию к делфи, где написано, что CreateThread ни в коем случае нельзя использовать в явном виде!?
В таком случае ты получаешь кучу "странных" ошибок из-за неверной работы менеджера памяти, который будет всё ещё thread-unsafe.
Для решения этой проблемы в делфи существует функция BeginThread, она переводит менеджер памяти в потокобезопасный режим, создает враппер для дельфийских исключений в новом потоке и вызывает в конце концов CreateThread.
Согласен, просто они не знают, что существует асинхронный ввод-вывод. :)