W3C home > Mailing lists > Public > www-lib@w3.org > October to December 2002

multithread in libwww

From: WangHD <richard@sunjapan.com.cn>
Date: Fri, 4 Oct 2002 14:15:00 +0800
Message-ID: <016001c26b6d$5eb8eca0$3f0410ac@sunjapan.com.cn>
To: <www-lib@w3.org>
hello

can anyone help me about following problem?

my OS is SunOS 5.6. I want to make a function(named FuncA) by which I can
send request to a web site and get response from that site.
If the time speicified by main program(as a parameter of FuncA) is over, the
function should return a overtime  error.

it looked like following

main program -> FuncA -> web site -> FuncA -> main program

I use libwww to do that job in FuncA,it did work in non-multithread
environment,but if the main program is one thread of a process , the FuncA
failed.

I checked the libwww document, but found no answer.

follwing is my test program , in which the postSDBService function is what I
called FuncA before.


#include "postSDBService.h"
#include <pthread.h>

PRIVATE void* test(void* arg)
{
  int nRet;
  char *szBuf = NULL;
  unsigned int nBufSize = 0;
  char szErrorMessage[SDB_MSGSIZE+1];

  HTAssocList* paramList = getParamsList();
  printf("!!!!!!!!!!!!!!!!!!!");
  memset((char*)szErrorMessage, 0, sizeof(szErrorMessage));

  setInParam(paramList, "MEBR_NO", "zhxj100000");
  setInParam(paramList, "LOG_OUTPUT_PARAM", "0");

  nRet = postSDBService(  "192.168.3.61",
       8089,
       "KissService_10",
       "ComRefAMCMember",
       "KISS",
       "3",
       "XML",
       "MngCustomer_ComRefAMCMember",
       paramList,
       4000,
       &szBuf,
       &nBufSize,
       (char*)&szErrorMessage);

  if (nRet == 0){
    printf("Success:\n%d\n%s\n", nBufSize, szBuf);
  }else{
    printf("[%d]Failure:\n%s\n", nRet, szErrorMessage);
  }

  deleteParamsList(paramList);
  free(szBuf);

  return;
}

PRIVATE void* test1(void* arg)
{
  int nRet;
  char *szBuf = NULL;
  unsigned int nBufSize = 0;
  char szErrorMessage[SDB_MSGSIZE+1];

  HTAssocList* paramList = getParamsList();
  printf("!!!!!!!!!!!!!!!!!!!");

  memset((char*)szErrorMessage, 0, sizeof(szErrorMessage));

  setInParam(paramList, "MEBR_NO", "1234567890");
  setInParam(paramList, "LOG_OUTPUT_PARAM", "0");

  nRet = postSDBService(    "192.168.3.61",
                            8089,
                            "KissService_5",
                            "MypRefAddress",
                            "MyPage",
                            "3",
                            "XML",
                            "RefMember_MypRefAddress",
                            paramList,
                            20000,
                            &szBuf,
                            &nBufSize,
                            (char*)&szErrorMessage);

  if (nRet == 0){
    printf("Success:\n%d\n%s\n", nBufSize, szBuf);
  }else{
    printf("[%d]Failure:\n%s\n", nRet, szErrorMessage);
  }

  deleteParamsList(paramList);
  free(szBuf);

  return;
}



PRIVATE void* test2(void* arg)
{
 printf("test test test \n");
}

int main(int argc, char* argv[])
{
    pthread_t tid[20];
 pthread_attr_t attr[20];
    int i;
 void * arg;
 void ** status;


 for (i = 0; i < 3; i++) {
  pthread_attr_init(&attr[i]);
  pthread_attr_setstacksize(&attr[i], 2097152);
  pthread_create(&tid[i], &attr[i], test, arg);
  printf("thread  %d\n", tid[i]);
 }

 for (i= 3; i < 6; i++) {
  pthread_attr_init(&attr[i]);
  pthread_attr_setstacksize(&attr[i], 2097152);
  pthread_create(&tid[i], &attr[i], test1, arg);
  printf("thread  %d\n", tid[i]);
 }

 for (i = 0; i < 6; i++) {
  pthread_join(tid[i], status);
 }

 return 0;
}
Received on Friday, 4 October 2002 02:15:43 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 23 April 2007 18:18:42 GMT