Scuder писал(а):Возможно?
Задача такая: есть программа, которая отсылает на удалённый сервер информацию. Информации много, отсылать надо постоянно. Встал вопрос о создании отдельных потоков. Как это можно реализовать?
GM писал(а):Я если я правильно понял ,то вот пример:
BuilderSoft писал(а):...
но многопоточность не совсем это
...
Иногда многопоточные приложения работают гораздо медленнее однопоточных. Так что стоит крепко подумать
...хомячков этих я в детстве отлюбил.
И объясни ты мне, пожалуйста, как это ты на VB ухитряешься *одновременно* вызывать функцию 10 раз?
Function Payment(ServiceID As String, PhoneNumber As String, Amount As String, TransactionNumber As String) As String
Dim Pi As Integer
For Pi = 0 To 9
If ConFree(Pi) = True Then GoTo Ne1
Next Pi
Exit Function
Ne1:
ConFree(Pi) = False
Me.PTime(Pi) = "0"
Me.Status(Pi).Caption = "[" & CStr(TransactionNumber) & "] Авторизация..."
DoEvents
For a1(Pi) = 1 To 2
Query(Pi) = ""
Query(Pi) = [cut]
Con(Pi).open "POST", "https://[cut]/xml.jsp", True
Con(Pi).setRequestHeader "Accept-Language", "ru, en"
Con(Pi).setRequestHeader "Accept-Charset", "windows-1251;q=1"
Con(Pi).setRequestHeader "Content-Type", "text/xml; charset=windows-1251"
Con(Pi).setRequestHeader "Content-Length", CStr(Len(Query(Pi)))
Con(Pi).send Query(Pi)
Do While Con(Pi).readyState <> 4
Sleep (20)
DoEvents
Loop
Dim Answer(10) As String
Answer(Pi) = Con(Pi).responseText
DoEvents
[обработка ответа]
If a1(Pi) = 1 Then
Me.Status(Pi).Caption = "[" & CStr(TransactionNumber) & "] Проведение платежа..."
DoEvents
Else
Me.Status(Pi).Caption = "[" & CStr(TransactionNumber) & "] Платёж успешно проведён."
DoEvents
End If
Next a1(Pi)
ConFree(Pi) = True
Exit Function
End Function
И что такое псевдопотоки?
И как Task Manager может показать потоки, если он в принципе показывает только процессы?
Task Manager показывает не потоки процесса, а их количество.
Для этого ты должен быть уверен, что твой сервер приложений (кстати, это не JONAS, часом?) создает как минимум по одному потоку на каждый твой коннект и всю работу с этим коннектом выполняет именно в его трэде.
Что же касается твоей части, то коннекты нужно открывать вручную и ни в коем разе их не клонировать.
Dim Con(10) As MSXML2.XMLHTTP
For i(1) = 0 To 9
Set Con(i(1)) = New MSXML2.XMLHTTP
ConFree(i(1)) = True
Next i(1)
Возможно, у тебя банально не хватает вычислительной мощности/памяти на серваке. Посмотри его загрузку, погоняй Performance Counter'ы. Не исключено, что все решится покупкой двухпроцессорного юнита или дополнительного гига оперативки
Debug.Print Now & " " & Pi
Круто. Респект . Сразу виден подход делового человека.
ты запускаешь одного клиента с 10 коннектами, он видит, что ProcessID у них всех один и тот же, и сует их все в один трэд. Ты запускаешь 10 процессов, он видит, что к нему пришли 10 разных клиентов, и создает по трэду на коннект (в данном случае - на клиентский процесс). Только если так.
Debug.Print Now & " " & Pi
Do While Con(Pi).readyState <> 4
Sleep (20)
DoEvents
Debug.Print Now & " " & Pi
Loop
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24