[ Príspevkov: 9 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.08.10
Prihlásený: 27.08.10
Príspevky: 8
Témy: 1 | 1
NapísalOffline : 27.08.2010 13:14 | C++ Timeout

Potreboval by som poradit.
Kód:
...
Data = 0;
i = 0;
while( i < NumberOfGate ){

    Read();
    Data = CntData + Data;
    i++;
    if( Terminated ) break;
}
DataArray[z] = Data ;
...


Kód:
void GetCntThread::Read () {
   BYTE ResultReturned;
   if(FALSE == C8855ReadData(    hC8855,
                        &CntData,
                        &ResultReturned)){;
      Form1->Memo2->Lines->Add("Read data ERROR.");
      return;
   }
}


Moja funkcia C8855ReadData() nacitava udaje z externeho zariadenia. To da nastavy v inej casti kodu, aby vysielalo data kazdy presne stanoveny casovy interval. Avsak nedokonalostou sa stava , ze mi externe zariadenie neodosle informaciu. Vdedy program zamrzne, lebo stale caka na data , ktore ale nikdy nepridu.

Potreboval by som nejakym sposobom osetrit Read() . Viem ze extistuju timeouty , ktore by mohli pomoct ale neviem ich v C++ pouzit (teda nasiel som o tom vela ale v c++ skoro nic :P ) . Sami si ich neviem spravit , nie som taky guru programator :D

Dakujem uz teraz.


Offline

Skúsený užívateľ
Skúsený užívateľ
C++ Timeout

Registrovaný: 11.01.09
Prihlásený: 05.05.24
Príspevky: 1385
Témy: 9 | 9
Bydlisko: Hrinova
NapísalOffline : 27.08.2010 13:48 | C++ Timeout

Neviem, ako pracuje funkcia C8855ReadData, ale ak nebeží paralelne, tj. čaká sa na jej ukončenie, tak by som celú funkciu Read() spúšťal v novom vlákne. V prípade spomínanej nedokonalosti aplikácia nezatuhne, ale iba dané vlákno (a to by sa dalo v krajnom prípade násilne ukončiť).


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.08.10
Prihlásený: 27.08.10
Príspevky: 8
Témy: 1 | 1
Napísal autor témyOffline : 27.08.2010 14:36 | C++ Timeout

Paralerne nebezi, lebo s vlaknami robyt neviem. Funkcia v podstate len caka na data ktore pridu a potom pokracuje. Ta chyba sa netika softu ale samotneho hardweru a neda sa odstranit. Proste raz za cas tie data neposle.
Viem ze v .NET aplikaciach abo Jave existuju timeouty ktore pre funkciu vyhradia maximalny cas, ak sa do vtedy funkcia sama neukonci. V C++ by mao extistovat tiez nico podobne ale nieviem ako to spravit.


Offline

Skúsený užívateľ
Skúsený užívateľ
C++ Timeout

Registrovaný: 11.01.09
Prihlásený: 05.05.24
Príspevky: 1385
Témy: 9 | 9
Bydlisko: Hrinova
NapísalOffline : 27.08.2010 15:51 | C++ Timeout

Ak ti bránia použiť vlákna iba vedomosti, tak ti trocha pomôžem. Ak pracuješ vo Windowse, budeš potrebovať tieto WinAPI funkcie:

CreateThread
http://miniurl.com/51828

ResumeThread
http://miniurl.com/51829

TerminateThread
http://miniurl.com/51830

WaitForSingleObject
http://miniurl.com/51831

Samotný kód:
Kód:
//...
  Data = 0;
  i = 0;
  int interval_ms = 5000;   // cas, ktory potrebujes, v ms
  DWORD threadID;
  HANDLE hThread;

  while( i < NumberOfGate ) {

    hThread = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE) &ThreadFunction, NULL, 0, &threadID );
    if ( WaitForSingleObject( hThread, interval_ms ) == WAIT_TIMEOUT )
        TerminateThread( hThread, 0 );      // nasilne ukoncenie v pripade, ako to funkcia nestihne vcas

    Data = CntData + Data;
    i++;
    if( Terminated )
      break;

  }

  DataArray[z] = Data ;
//...


Funkcia vlákna:
Kód:
DWORD WINAPI ThreadFunction( LPVOID ) {

  BYTE ResultReturned;
  if ( FALSE == C8855ReadData(    hC8855,
                        &CntData,
                        &ResultReturned)) {
      Form1->Memo2->Lines->Add("Read data ERROR.");
      return;
   }
}



Ak niečo nie je jasné, prípadne to nefunguje, ozvi sa.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.08.10
Prihlásený: 27.08.10
Príspevky: 8
Témy: 1 | 1
Napísal autor témyOffline : 27.08.2010 16:43 | C++ Timeout

Vyzera to pekne.
Vyhodilo mi jednu chybu:

[BCC32 Error] Unit2.cpp(70): E2451 Undefined symbol 'ThreadFunction'

pri:
Kód:
 hThread = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE) [b]&ThreadFunction[/b], NULL, 0, &threadID );


Offline

Skúsený užívateľ
Skúsený užívateľ
C++ Timeout

Registrovaný: 11.01.09
Prihlásený: 05.05.24
Príspevky: 1385
Témy: 9 | 9
Bydlisko: Hrinova
NapísalOffline : 27.08.2010 16:56 | C++ Timeout

Zrejme si v hlavičkovom súbore zabudol pripísať jej prototyp:
Kód:
DWORD WINAPI ThreadFunction( LPVOID );


// môžeš to pridať aj v aktuálnom zdrojovom súbore medzi include-ami a začiatkom definície funkcií, ale je zvykom písať prototypy do hlavičkového súboru


_________________
Ak potrebujete pomoc s diagnostikou/opravou vasej elektroniky ( notebook, motherboard, GPU, a ine ), kontaktujte ma cez SS.
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.08.10
Prihlásený: 27.08.10
Príspevky: 8
Témy: 1 | 1
Napísal autor témyOffline : 27.08.2010 17:05 | C++ Timeout

praveze hlavicka je napisana dobre ...


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.08.10
Prihlásený: 27.08.10
Príspevky: 8
Témy: 1 | 1
Napísal autor témyOffline : 27.08.2010 17:10 | C++ Timeout

kniznica je <windows.h> ?

Pripadne netreba nieco deklarovat aj v *.h subore ?


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.08.10
Prihlásený: 27.08.10
Príspevky: 8
Témy: 1 | 1
Napísal autor témyOffline : 27.08.2010 17:26 | C++ Timeout

AA .. pardon

nasiel som chybu...

Zajtra to skusim otestovat .... dufam ze to uz pojde bez problemou.

Dam vediet ako to dopadlo. Velka vdaka ;)


 [ Príspevkov: 9 ] 


C++ Timeout



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Crontab a timeout

v Operačné systémy Unix a Linux

0

426

25.01.2010 20:30

JanoF

V tomto fóre nie sú ďalšie neprečítané témy.

Window.open - timeout

v JavaScript, VBScript, Ajax

11

1306

18.11.2007 14:48

delo101

V tomto fóre nie sú ďalšie neprečítané témy.

Session timeout alebo regenerate

v PHP, ASP

0

640

08.11.2011 16:19

quark

V tomto fóre nie sú ďalšie neprečítané témy.

BSoD Clock watchdog timeout

v Ovládače

6

581

25.09.2017 17:58

2petter8

V tomto fóre nie sú ďalšie neprečítané témy.

Plash Player 12% Timeout

v Ostatné programy

4

467

02.12.2011 16:38

stevo512

V tomto fóre nie sú ďalšie neprečítané témy.

js funkcia timeout, zahlcovanie operacnej pamete

v JavaScript, VBScript, Ajax

2

485

25.04.2012 17:34

KViki

V tomto fóre nie sú ďalšie neprečítané témy.

AMD drivers timeout (AMD Radeon 6750 XT 12GB)

v ATI/AMD grafické karty

2

124

10.01.2024 20:09

misterso

V tomto fóre nie sú ďalšie neprečítané témy.

Mám sa učiť C ++/objective C/ C#?

v Assembler, C, C++, Pascal, Java

5

734

08.07.2014 20:40

XOLOO

V tomto fóre nie sú ďalšie neprečítané témy.

rozdiel medzi Borland 3.1 C++ vs Net. C++

v Assembler, C, C++, Pascal, Java

4

577

20.07.2010 12:54

walther

V tomto fóre nie sú ďalšie neprečítané témy.

K: PC Literaturu- C++/C#/java/python/ruby/RoR

v Kúpim

0

411

13.05.2014 18:16

expresado

V tomto fóre nie sú ďalšie neprečítané témy.

Hledá se programátor C/C++ pro vesmírné projekty (Praha)

v Ponuka práce

0

1123

10.05.2016 14:59

evolvsys

V tomto fóre nie sú ďalšie neprečítané témy.

Naučte se C++ za 21 dní + C++Builder 6

v Assembler, C, C++, Pascal, Java

18

2414

21.05.2010 21:08

Wpegb

V tomto fóre nie sú ďalšie neprečítané témy.

Hladam hracov na C&C Generals Zero Hour

v Počítačové hry

10

1251

07.03.2007 19:22

Spirit

V tomto fóre nie sú ďalšie neprečítané témy.

Čo mi treba na programovanie v C/C++

v Assembler, C, C++, Pascal, Java

17

1148

25.09.2011 18:14

reDo

V tomto fóre nie sú ďalšie neprečítané témy.

aky je rozdiel medzi C++ a Visual C++ ?

v Assembler, C, C++, Pascal, Java

8

1966

19.02.2011 22:46

vendo2

V tomto fóre nie sú ďalšie neprečítané témy.

Darujem knihy o programovaní (HTML, Java, Visual C++, C++ Builder, Android)

v Vymením a darujem

0

433

01.04.2019 11:20

tomasteicher



© 2005 - 2024 PCforum, edited by JanoF