Показать сообщение отдельно

Проблема с многопточностью. Borland C++ Builder
  #1  
Старый 04.04.2010, 11:49
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
С нами: 9410786

Репутация: 2731


По умолчанию Проблема с многопточностью. Borland C++ Builder

Возникла проблема с многопоточностью. Есть 100-поточная программа, которая для теста обращается к странице http://example.com. Проблема в том, что при первом нажатие кнопки (код ниже) происходит не 100, а рандумное количество запросов до 100 (н.п. 84, 95, 66, 52)... При втором же - ровно 100, как положено. Отснифал Process Explorer'ом - потоки создаются все, но вот запросы идут не все. И это только при ПЕРВОМ нажатии кнопки. При втором и всем последующим все идет как надо. Почему? Буду очень благодарен за помощь. Использую Borland C++ Builder 6.

Вот код запуска потоков:
PHP код:
TMyThread Thr[1000];
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i;

for(
i=0;i<100;i++)
Thr[i] = new TMyThread(false);

Вот метод Execute:
PHP код:
void __fastcall TMyThread::Execute()
{
 
HINSTANCE libcurl NULL;
     if((
libcurl LoadLibrary"libcurl.dll" )) == NULL)
          
MessageBox(NULL"ы"MB_OK0);

     
CURL*(__stdcall *curl_easy_init)();
     
CURLcode(__stdcall *curl_easy_setopt )(CURL *curlCURLoption option, ...);
     
CURLcode (__stdcall *curl_easy_perform )(CURL *curl);
     
void (__stdcall *curl_easy_cleanup )(CURL *curl);
     
curl_easy_init=(CURL*(__stdcall*)())GetProcAddress(libcurl"curl_easy_init" );
     
curl_easy_setopt=(CURLcode(__stdcall *)(CURL *curlCURLoption option, ...))
     
GetProcAddress(libcurl"curl_easy_setopt");
     
curl_easy_perform=(CURLcode(__stdcall *)(CURL *curl))GetProcAddress(libcurl"curl_easy_perform" );
     
curl_easy_cleanup=(void (__stdcall *)(CURL *curl))GetProcAddress(libcurl"curl_easy_cleanup" );

CURL *curl;
curl curl_easy_init();
curl_easy_setopt(curlCURLOPT_URL"http://www.example.com/");
curl_easy_setopt(curlCURLOPT_WRITEFUNCTIONWriter);
curl_easy_setopt(curlCURLOPT_WRITEDATA, &table);
curl_easy_perform(curl);
curl_easy_cleanup(curl);


 
Ответить с цитированием