- 1
- 2
- 3
- 4
- 5
- 6
- 7
// Delpih 7 отказывается компилировать этот код, тогда как в Delphi 2010 он вполне успешно компилируется.
// Отчего это?
for pthread in lst do
...
>>[Error] Unit1.pas(89): Operator not applicable to this operand type
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+129
// Delpih 7 отказывается компилировать этот код, тогда как в Delphi 2010 он вполне успешно компилируется.
// Отчего это?
for pthread in lst do
...
>>[Error] Unit1.pas(89): Operator not applicable to this operand type
При нажатии на кнопку создается поток, ему передается некий строковый параметр, и он (поток) помещается в список. Список как бы "депо" потоков. Стоит задача: пресекать попытки создавать потоки с повторяющимися параметрами, т.е не создавать поток до тех пор, пока активен поток с таким же параметром. Для этого каждый раз перед созданием потока процедура просматривает весь список-депо и сравнивает параметра всех потоков с вновь заданным и если находит поток с таким же параметром - поток не создается.
>>Может просто залочить список на время прохода?
Тогда потоки встрянут.
Да почему, ты же обращаешься к списку только при старте потока и при его остановке (?). Пробежать по списку - совсем недолго. Ну не тысячи же там потоков, и не сотнями в секунду они стартуют (а если тысячи, то список - плохое решение).
Поэтому вот такое предложение:
- Перед стартом потока лочим список, проверяем, что такого параметра в нем еще нет, если нету - добавляем тред в список, стартуем его, снимаем лок.
- Когда поток собирается выйти - лочим список, удаляем тред из списка, снимаем лок.
именно так я и делаю.
Use Items to obtain a pointer to a specific object in the array. The Index parameter indicates the index of the object, where 0 is the index of the first object, 1 is the index of the second object, and so on. Set Items to change the reference at a specific location.
Use Items with the Count property to iterate through all of the objects in the list.
Итого: И проблема не в цикле, а в том, как бы не забыть потом анлокнуть.
- заводим TList (или что-то более подходящее, х.з. есть ли эквивалент std::set<std::string> в делфе, и как он называется).
- ни в коем случае не лезем к этому листу из каких-либо потоков кроме главного!
- при нажатии кнопки проверяем, есть ли строка в списке, если нет - добавляем, запускаем тред
- перед остановкой треда запускаем через synchronize() процедуру, которая удаляет строку из списка
gui - потоку: Я тебя породил, я тебя и уьью!.
Допустим, есть многопоточный прокси-чекер, загружен список из 10 проксей для проверки, счетчик потоков установлен на 50. Что в этом случае дадут дополнительные потоки, при проверке проксей? Я бы понимал, если на один прокси-один поток. Но 50! Или один поток тут же сменяет другой, если он завис при проверке, и этим обеспечивается высокая скорость выполнения?
http://govnokod.ru/13317
Сколько ни пытался вникнуть, не доходит.
begin
if ind<>form1.Memo1.Lines.Count then
inc(ind);
result:=ind;
end;
Эта процедура возвращает номер текущей строки в мемо1. До тех пор, пока в мемо есть строки, поток крутит цикл. Но это 1 уникальный поток. А все остальные тихо дрочат в сторонке. НЕТ здесь многопоточногсти, сынок.
http.ProxyParams.ProxyServer:=ip;
http.ProxyParams.ProxyPort:=StrToInt(por t);
http.ReadTimeout:=Form1.SpinEdit2.Value* 1000;
resp:=http.Get('http://ya.ru/');
if pos('ya.ru',resp)<>0 then
form1.Memo2.Lines.Add(ip+':'+port);
except
даже проверки нет connected true или нет, один хуй хуячит
Бля, да посмотри уже в словаре это слово!!!
THashedStringList есть. В седьмой дельфи он по идее в IniFiles объявлен.
Ненормативная лексика
Ненормативная лексика
Ко-ко-ко
А где там отладчик?)
(trollface)
(solus qum sola, non cogitabuntur orare Pater Noster)
Но ведь Делфай не паскаль, Паскаль не Делфай.