Здравствуйте, Аноним, Вы писали:
А>Пробовал по-другому:
А>(аплоадить каждую часть данных в отдельном http запросе)
А>for (i = 0; i < parts; i++)
А>{
А> gethttpconnection(server, port);
А> openrequest(HTTP_VERB_POST...);
А> httpsendrequestEx(...);
А> chttpfile->write(&partData, PARTSIZE);
А> endrequest();
А> partData += PARTSIZE;
А>}
А>- очень медленно Можно конечно большими кусками слать, но...думаю, это не совсем правильный выход.
Почему же неправильный...
У вас соединение каждый раз устанавливается и рвется, а это довольно длительная операция, поэтому если попробовать так:
gethttpconnection(server, port);
for (i = 0; i < parts; i++)
{
openrequest(HTTP_VERB_POST...);
httpsendrequestEx(...);
chttpfile->write(&partData, PARTSIZE);
endrequest();
partData += PARTSIZE;
}
То все должно быть довольно шустро, так как посылка запроса — штука не очень накладная (что там — десяток хеадеров и все).
Насчет завершения потока. Нужно разбивать на такие части (то есть вычислять parts) таким образом, чтобы время посылки одной части было достаточным для реакции потока на команду закрытия, ну а в цикле поставить проверку на Terminated:
for (i = 0; i < parts; i++)
{
if (Terminated) break;
...
}
А в главном потоке устанавливать Terminated = true.