Avatar billede dna8018 Nybegynder
27. august 2002 - 15:55 Der er 6 kommentarer og
1 løsning

Write thread til builder c++

Hej,
Er der nogle som can hjælpe mig med at lave et lille program som can write en lang fil til comport ved anvendelse builder c++, det skal være thread ellers windows går i baglås.
Avatar billede soepro Nybegynder
27. august 2002 - 16:02 #1
Her er svarerne fra sidste gang: (Søgefunktioner er RET SMART her på eksperten - jeg søgte blot på TComThread)

http://www.eksperten.dk/spm/9977
http://www.eksperten.dk/spm/11289

samt URL\'en på komponenten:

http://codeguru.developer.com/network/serial.shtml
Avatar billede dna8018 Nybegynder
27. august 2002 - 16:08 #2
De to 9977 og 11289 anvend ikke tråd teknik, jeg tror ikke man can bruge til at send en lang fil.
Avatar billede soepro Nybegynder
28. august 2002 - 08:23 #3
dna8018 >> TComThread classen anvender Threads til at modtage data, ikke sende - men det burde være en smal detalje at ændre. Hvis du selv har noget kode, der kan håndtere kommunikationen med COM-porten (Jeg mener at have læst her på eksperten at CreateFile("\\localhost\COM1") eller deromkring, giver direkte adgang til COM1 porten)burde det være en smal sag at lave det trådet:

class CMyThread : public TThread
{
  private:
  HWND  comHandle;

  protected:
  void __fastcall Execute(void);

  public:
  __fastcall CmyThread(int portNbr);
};

__fastcall TmyThread::TmyThread(int port)
{
  AnsiString portFile = "\\localhost\COM" + IntToStr(port);
  comHandle = CreateFile(portFile);
  // Og sikkert noget mere kode
} //
void __fastcall TmyThread::Execute(void)
{
  while (!Terminated)
  {
    if (moreToSend())
      WriteFile(comFile, nextCommByte());
  };
} // Execute

Detaljerne omkring CreateFile er jeg ikke sikker på - dem må du checke i Windows 32 API help'en.
Avatar billede dna8018 Nybegynder
28. august 2002 - 09:21 #4
Hej Soepro,

Hvis jeg har en fil, som indholder masse karakter og jeg vil gerne send en karakter ad gange, hvordan går jeg så ?
Avatar billede soepro Nybegynder
28. august 2002 - 09:49 #5
Det er jo netop nextCommByte() metoden, jeg forestillede mig der skulle klare det:

int  started = 0;
bool  filEof;
FILE* masserAfTegnFil;
char  nextTegn;

bool moreToSend(void)
{
  if (!started)
  {
    masserAfTegnFil = fopen("C:\\tekstfil.txt", "rb");
    if (masserAfTegnFil != NULL)
      filEof = false;
  };

  if (masserAfTegnFil != NULL && !filEof)
    if (fread(&nextTegn, sizeof(nextTegn), 1, masserAfTegnFil) == 1)
      return true;
  return false;
} // moreToSend

char nextCommByte(void)
{
  return nextTegn;
} // nextCommByte
Avatar billede soepro Nybegynder
28. august 2002 - 09:52 #6
Ooops - started skal selvfølgelig sættes til true inde i den første if i moreToSend():

  if (!started)
  {
    masserAfTegnFil = fopen("C:\\tekstfil.txt", "rb");
    if (masserAfTegnFil != NULL)
      filEof = false;
    started = true;
  };

Og så skal man vel have en closeCommFile(void) metode også, som skal fyres uden for 'while (!Terminated)' loopet i Execute() metoden:

void closeCommFile(void)
{
  if (masserAfTegnFil != NULL)
    fclose(masserAfTegnFil;
  started = filEof = false;
} // closeCommFile
Avatar billede dna8018 Nybegynder
28. august 2002 - 10:17 #7
Hej
Det ser godt ud, jeg skal nok prøve idag, du får besked fra mig.
MVH
DNA8018
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