Avatar billede frostholm Praktikant
29. maj 2002 - 15:39 Der er 6 kommentarer og
1 løsning

DOMdokument, problem med ASYNC attribut

Hejsa

Har lavet et program der parser der modtager noget XML, via nettet.

Det benytter sig af MS xml parser msxml4.dll.

Jeg har oprettet et DOMdokument (IXMLDOMDocument), sætter attributten async til false (skal kommunikere asynkront), og kalder dernæst load funktionen :

objdomptr.load(URL);

Det går også godt, problemet kommer hvis serveren ikke returnere svar, så vil komponenten stå og vente.

Spørgsmålet er så kan man sætte en timer op, så hvis der ikke er svar inden for 60 sekunder så afslut loaden.?

Håber der er nogle der kan hjælpe.

mvh
Michael F
Avatar billede jpk Nybegynder
29. maj 2002 - 15:42 #1
"sætter attributten async til false" og "skal kommunikere asynkront" er modsætninger..?
Avatar billede frostholm Praktikant
29. maj 2002 - 15:57 #2
ups, ja men jeg skal så køre synkront, da den skal sættes til true for at virke
Avatar billede jpk Nybegynder
29. maj 2002 - 15:58 #3
Okay, så er der jo ikke mange andre muligheder end at lave det i en tråd...
Avatar billede jpk Nybegynder
29. maj 2002 - 16:08 #4
Hvis metoden er 'blocking' (går jeg ud fra, hvis den kører synkront???), hjælper det ikke noget blot at sætte en timer...
Avatar billede frostholm Praktikant
30. maj 2002 - 09:32 #5
Jeg har nedenstående funktion, som kalder xml com objectet synkront, men hvordan kan jeg inkode in thread (kender desværre ikke meget til threads), så jeg kan evt afslutte kaldet til com funktion load, fx efter 60 sek, hvis der fx ikke er kommet svar inden da.

Håber på en enkelt eksempel

Mvh
Michael F

int logon(void)
{
  if (strcmp(mininput.user_id,"")==0)
  {
    IXMLDOMDocumentPtr objDOMDoc;
    IXMLDOMNodeListPtr NodeList = NULL;
    int len;
    char * message = new char[255];
    _variant_t varOut((bool)TRUE);
    EVAL_HR(objDOMDoc.CreateInstance("Msxml2.DOMDocument.4.0"));
   
    objDOMDoc->async = false;
    varOut = objDOMDoc->load(MSERVICE);

    if ((bool)varOut == FALSE)
      throw(0);
  }
  return(1);
};
Avatar billede jpk Nybegynder
30. maj 2002 - 13:45 #6
Her er et simpelt eksempel på multithreading:
Du kan gøre noget lignende, altså hvor du laver dit load-kald i en tråd, således kaldet ikke blokerer for andet.

#include <stdio.h>
#include <windows.h> /* For the CreateThread prototype */

long WINAPI Validate(long); /* Function prototype */

HANDLE hFreshFile;
int iBytesWritten, iCount, iDataValue;

void main(void)
{ int iID;
  HANDLE hThread;

/* Step 1: Let the user input some data. */

  hFreshFile = CreateFile("datafile",...)
  for (iCount = 0; iCount<100; iCount++)
{ printf("Please enter next data item: ");
  scanf("%d",&iDataValue);
  WriteFile(hFreshFile,&iDataValue,sizeof(int),&iBytesWritten,NULL);
}
CloseHandle(hFreshFile);

/* Dispatch a thread that does Step 2 (Validate the data) for you. */

hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Validate,NULL,0,&iID);

/* Step 3: Let the user enter more data. */


long WINAPI Validate(long lParam)
{ HANDLE hOldFile;
  int iTemp;
hFreshFile = CreateFile("datafile",...)
hOldFile = CreateFile("revenues.dat",...);

< Munge the data here. >
}
Avatar billede frostholm Praktikant
21. januar 2004 - 15:10 #7
lukker spg
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester