- 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
bormand 06.07.2013 19:53 # +2
Stertor 06.07.2013 19:54 # −3
bormand 06.07.2013 19:56 # +3
Stertor 06.07.2013 19:58 # −3
bormand 06.07.2013 20:06 # +2
Stertor 06.07.2013 20:07 # +1
bormand 06.07.2013 20:09 # −2
Stertor 06.07.2013 20:46 # −2
При нажатии на кнопку создается поток, ему передается некий строковый параметр, и он (поток) помещается в список. Список как бы "депо" потоков. Стоит задача: пресекать попытки создавать потоки с повторяющимися параметрами, т.е не создавать поток до тех пор, пока активен поток с таким же параметром. Для этого каждый раз перед созданием потока процедура просматривает весь список-депо и сравнивает параметра всех потоков с вновь заданным и если находит поток с таким же параметром - поток не создается.
>>Может просто залочить список на время прохода?
Тогда потоки встрянут.
bormand 06.07.2013 20:59 # −2
Да почему, ты же обращаешься к списку только при старте потока и при его остановке (?). Пробежать по списку - совсем недолго. Ну не тысячи же там потоков, и не сотнями в секунду они стартуют (а если тысячи, то список - плохое решение).
Поэтому вот такое предложение:
- Перед стартом потока лочим список, проверяем, что такого параметра в нем еще нет, если нету - добавляем тред в список, стартуем его, снимаем лок.
- Когда поток собирается выйти - лочим список, удаляем тред из списка, снимаем лок.
Stertor 06.07.2013 21:03 # −1
именно так я и делаю.
bormand 06.07.2013 21:05 # −2
Stertor 06.07.2013 21:18 # −2
bormand 06.07.2013 21:23 # −2
inkanus-gray 06.07.2013 21:32 # 0
Stertor 06.07.2013 21:33 # −2
inkanus-gray 06.07.2013 21:37 # −2
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.
Итого: И проблема не в цикле, а в том, как бы не забыть потом анлокнуть.
Stertor 06.07.2013 21:38 # −2
bormand 06.07.2013 21:21 # −1
- заводим TList (или что-то более подходящее, х.з. есть ли эквивалент std::set<std::string> в делфе, и как он называется).
- ни в коем случае не лезем к этому листу из каких-либо потоков кроме главного!
- при нажатии кнопки проверяем, есть ли строка в списке, если нет - добавляем, запускаем тред
- перед остановкой треда запускаем через synchronize() процедуру, которая удаляет строку из списка
Stertor 06.07.2013 21:25 # −2
gui - потоку: Я тебя породил, я тебя и уьью!.
Stertor 06.07.2013 21:47 # −2
Допустим, есть многопоточный прокси-чекер, загружен список из 10 проксей для проверки, счетчик потоков установлен на 50. Что в этом случае дадут дополнительные потоки, при проверке проксей? Я бы понимал, если на один прокси-один поток. Но 50! Или один поток тут же сменяет другой, если он завис при проверке, и этим обеспечивается высокая скорость выполнения?
Stertor 06.07.2013 21:57 # −2
http://govnokod.ru/13317
Сколько ни пытался вникнуть, не доходит.
anonimb84a2f6fd141 06.07.2013 22:34 # −1
begin
if ind<>form1.Memo1.Lines.Count then
inc(ind);
result:=ind;
end;
Эта процедура возвращает номер текущей строки в мемо1. До тех пор, пока в мемо есть строки, поток крутит цикл. Но это 1 уникальный поток. А все остальные тихо дрочат в сторонке. НЕТ здесь многопоточногсти, сынок.
inkanus-gray 06.07.2013 22:48 # −2
Stertor 07.07.2013 10:23 # 0
anonimb84a2f6fd141 07.07.2013 22:08 # 0
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 или нет, один хуй хуячит
anonimb84a2f6fd141 08.07.2013 00:58 # 0
Stertor 08.07.2013 10:26 # −1
Бля, да посмотри уже в словаре это слово!!!
kipar 06.07.2013 21:49 # −1
THashedStringList есть. В седьмой дельфи он по идее в IniFiles объявлен.
inkanus-gray 06.07.2013 21:57 # −2
inkanus-gray 06.07.2013 22:10 # 0
Stertor 06.07.2013 22:15 # −3
inkanus-gray 06.07.2013 22:21 # −2
Stertor 06.07.2013 22:22 # −3
inkanus-gray 06.07.2013 22:33 # −2
anonimb84a2f6fd141 06.07.2013 22:35 # 0
Ненормативная лексика
Stertor 06.07.2013 22:38 # 0
Ненормативная лексика
Stertor 06.07.2013 22:39 # 0
Ко-ко-ко
Stertor 06.07.2013 22:26 # 0
А где там отладчик?)
(trollface)
an0nym 06.07.2013 22:08 # −2
Stertor 06.07.2013 22:12 # −5
(solus qum sola, non cogitabuntur orare Pater Noster)
Но ведь Делфай не паскаль, Паскаль не Делфай.