Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Uppdatering av MFC fönster (Nätverk mm)

Postades av 2003-03-02 12:01:11 - Carl-Adam Brengesjö, i forum c++, Tråden har 7 Kommentarer och lästs av 785 personer

Jag har inte jobbat alls lång tid med MFC (ungefär 1-2 veckar bara) och har gjort ett program som skickar lite data övernätverket och skriver ut händelser i ett "loggfönster"
loggfönstret är en vanlig EDIT-box med readonly och med värde variabel i format CString.

vid varje händelse som skall läggas till i loggen kallar jag på funktionen <code>CDlg::AddEvent(const char* s, int i = 0)</code>

som ser ut så här:
<code>
CDlg::AddEvent(const char* s, int i)
{
UpdateData(true);
char tmp[255];
if (i)
sprintf(tmp,"Event %i: %s\r\n");
else
sprintf(tmp,"%s\r\n");

m_EVENT_LOGG += tmp;
UpdateData(false);
}
</code>

tex:
<code>
send(...); // sending packages
AddEvent("Packages Sent..."); // add to logg
</code>

när jag skickar packeten så "hänger" sig programmet tills den har fått respons från mottagardatorn, vilket är lite konstigt eftersom samma källkod till själva nätverkskoden fungerar utan att göra det i console miljö, och händelserna (loggen) uppdateras inte och du kan inte göra någonting annat i programmet undertiden. (tex. trycka på "cancel")
Däremot uppdateras fönster iaf verkar det som, för Editboxens rulllista "expanderar" eftersom det blir fler rader, men ingen text i den syns. Lite störande faktiskt.
Jag provade med att lägga till Sleep() i slutet på CDlg::AddEvent() för jag tänkte att CPUn kanske inte hänger med att uppdatera texten. (CPU belastningen ligger nämligen på 100% när den hänger sig)
men det funkade inte häller.

(när programmet fått respons kommer texten fram, så texten läggs till korrekt i CString variabeln m_EVENT_LOGG)

Nån som har nån idé om vad det kan vara?



Svara

Sv: Uppdatering av MFC fönster

Postades av 2003-03-02 22:51:28 - Håkan Borneland

Du har gjort så att man inte behöver skicka med ett heltal till funktionen CDlg::AddEvent, vilket du i exemplet inte heller gör.
I IF satsen använder du däremot variabeln "i" för att se om "i" är "sann", d.v.s. om IF satsen skall köras.
I ditt fall blir aldrig "i" "sann" m.a.o. den körs aldrig. I din funktion körs bara ELSE satsen.
Om jag inte missat att du skickar med ett tal förstås.
Vet inte om detta spelar roll för uppdateringen av ditt loggfönster, men ändå.

/Håkan



Svara

Sv: Uppdatering av MFC fönster

Postades av 2003-03-03 08:13:14 - Carl-Adam Brengesjö

Hmm, jag missa bara att skriva med den parametern nu. (jag skrev av, inte kopierade)


Svara

Sv: Uppdatering av MFC fönster

Postades av 2003-03-03 09:17:08 - Jarle Skogheim

Vet inte om jag förstog dig riktigt, men om det är i send(...) det hänger sig beror det kanske på att du skickar data över nätverket synkront. Alltså stoppas allt i din process upp tills allt data är skickat och din socketfunktion (eller vad det nu är) har returnerat. Om samma komm. klass fungerar i consolemiljö verkar det dock som om min förklaring inte håller. :)

Kan du ge lite mer info om hur din send() funktion ser ut?


// Jarle


Svara

Sv: Uppdatering av MFC fönster

Postades av 2003-03-03 19:40:12 - Carl-Adam Brengesjö

Här är alla send funktioner:
<code>
if (send(s, sendcode1, sizeof(sendcode1)-1, 0) == -1)
{
sprintf(tmp,"Error sending Packets"); AddEvent(tmp);
UpdateData(false);
closesocket(s);
return 1;
}

memset(&buffer, '\x41', 240);
send(s, buffer, 240, 0);

send(s, sendcode2, sizeof(sendcode2)-1, 0);
memset(&buffer, '\x42', 5000);
send(s, buffer, 5000, 0);

send(s, sendcode3, sizeof(sendcode3)-1, 0);
memset(&buffer, '\x43', 512);
send(s, buffer, 512, 0);

send(s, sendcode4, sizeof(sendcode4)-1, 0);
memset(&buffer, '\x44', 20480);
send(s, buffer, 20480, 0);

memset(&buffer, '\x44', 5000);
send(s, buffer, 5000, 0);

send(s, sendcode5, sizeof(sendcode5)-1, 0);
memset(&buffer, '\x45', 5000);
send(s, buffer, 5000, 0);

send(s, sendcode6, sizeof(sendcode6)-1, 0);
memset(&buffer, '\x46', 5000);
send(s, buffer, 5000, 0);

send(s, sendcode7, sizeof(sendcode7)-1, 0);
memset(&buffer, '\x47', 5000);
send(s, buffer, 5000, 0);

send(s, sendcode8, sizeof(sendcode8)-1, 0);
memset(&buffer, '\x48', 5000);
send(s, buffer, 5000, 0);
</code>

sendcodeX är definierade som (tex.)
<code>
char sendcode8[] =
"\x00\x00\x01\x10\x00\x00\x00\x00\x00\x00\x01\x10\x00\x00";
</code>

Men grejjen är att fönstret uppdateras i rulllisten, men jag ser inte texten...
programmet skall ju visa så här:
med en förstålig delay mellan varje delmoment. Det som du nämnde.
Grejen är ju att jag ser ju att fönstret uppdateras eftersom rulllisten expanderar,
men jag ser ju ingen text! Så man kan tro att programmet hängde sig, och avslutar det inkorrekt.

Så en delay när han skickar det är inget konstigt... grejjen är ju att jag vill se händelseförloppet!

<code>
Resolving Hostname...
(fail)? Resolve of %s failed, please try again
Connecting...
(fail)? Couldn't connect to host
Conntected!
Sending packages...
(fail)? Error sending packages
</code>

*notera att efter varje fail så avslutas ju funktionen


Svara

Sv: Uppdatering av MFC fönster (Nätverk mm)

Postades av 2003-03-10 08:54:43 - Ulf Bergqvist

Antagligen gör du anropen till servern i samma tråd som användargränssnittet. Då kan det inte uppdateras samtidigt. Du måste starta en ny tråd som gör serveranropen. Se AfxBeginThread i hjälpen. Tänk på att du kan behöva använda synkroniseringsobjekt, t.ex. CMutex i vissa lägen när du kör flera trådar. I MFC måste man också tänka på att den tråd som skapar ett MFC-objekt även måste ta bort det! När du skickar meddelanden mellan trådar, använd PostMessage.


Svara

Sv: Uppdatering av MFC fönster (Nätverk mm)

Postades av 2003-03-11 16:51:29 - Carl-Adam Brengesjö

hm... det där lät komplicerat ... ;)
men jag skall kolla upp det

förresten - fönstret hänger sig bara när man skickar till en dator med Microsoft Visual Studio inlaggt... :?


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 627
27 953
271 710
871
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies
Expand
next previous
Close

Previous

0/0

Next