Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » threads über mehrere Ordner

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
23.06.2004, 13:59 Uhr
aklaeser



Ich hab ein Programm das mir einen Ordner überwacht. Jetzt hab ich eine ini-Datei die ich auslese, in der aber mehrere Pfadangaben stehen die überwacht werden sollen. Jetzt hab ich folgendes Problem ich erstelle einen Thread:


C++:
    FILE * ini;
    char str1[100];
    CString str;

    ini = fopen("C:\\dir.ini", "r");

    while (!feof(ini))
    {
        fscanf(ini, "%s\n", str1);
        if (str1[0] != '[')
        {
            str = str1;

            str.Delete(0, 5);
            pfad = str;
            _beginthread( Thread_Watch, 0, (void*)new Param(FILE_NOTIFY_CHANGE_FILE_NAME, CString("FILE_NOTIFY_CHANGE_FILE_NAME") ) );
            _beginthread( Thread_Acc, 0,0);
        }
    }




ich deklarier den Pfad als eine globale CString Variable, wenn ich jetzt mein Programm starte wird aber immer nur die letzte Pfadangabe überwacht, also die vorangegangenen Ordner nicht, woran liegt das mit _beginthread erstelle ich doch jeweils immer wieder einen neuen Thread für jeden Ordner oder?

Dieser Post wurde am 24.06.2004 um 23:52 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.06.2004, 14:11 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


warum übergibst du den pfad nicht auf per param? dann kannst du dir die globale variable sparen
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.06.2004, 14:26 Uhr
aklaeser



und wie soll ich dort den pfad als parameter mitgeben? muss ich den in den Funktionen Thread_Watch un Thread_Acc mitgeben?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.06.2004, 14:59 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Mach es halt so:


C++:
typedef struct {
   DWORD dwTyp;
   CString strTyp;
   CString strPfad;
} MyParam;

//...

    FILE * ini;
    char str1[100];
    CString str;

    ini = fopen("C: \dir.ini", "r");

    while (!feof(ini))
    {
        fscanf(ini, "%s\n", str1);
        if (str1[0] != '[')
        {
            str = str1;

            str.Delete(0, 5);
            _beginthread( Thread_Watch, 0, (void*)new MyParam(FILE_NOTIFY_CHANGE_FILE_NAME, CString("FILE_NOTIFY_CHANGE_FILE_NAME"), str ) );
            _beginthread( Thread_Acc, 0,0);
        }
    }



dann kannste, so wie du in den funktionen auf die anderen beiden parameter zugreifst, auf den pfad-parameter zugreifen
--
class God : public ChuckNorris { };

Dieser Post wurde am 23.06.2004 um 15:01 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.06.2004, 15:10 Uhr
aklaeser



und wie komm ich in der folgenden Funktion auf den parameter str zugreifen


C++:
void Thread_Watch(void* arg)
{
    HANDLE file;
    file = FindFirstChangeNotification(str/*??*/, TRUE, FILE_NOTIFY_CHANGE_FILE_NAME);

    WaitForSingleObject(file, INFINITE);

    while (true)
    {
        FindNextChangeNotification(file);
        WaitForSingleObject(file, INFINITE);
    }

    FindCloseChangeNotification(file);
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.06.2004, 17:39 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


da du scheinbar den Param nicht brauchst machs einfach so:


C++:
    FILE * ini;
    char str1[100];
    CString str;

    ini = fopen("C: \dir.ini", "r");

    while (!feof(ini))
    {
        fscanf(ini, "%s\n", str1);
        if (str1[0] != '[')
        {
            str = str1;

            str.Delete(0, 5);
            _beginthread( Thread_Watch, 0, (void*)(LPCSTR)str);
            _beginthread( Thread_Acc, 0,0);
        }
    }

//...

void Thread_Watch(void* arg)
{
   CString str = (LPCSTR)arg;
    HANDLE file;
    file = FindFirstChangeNotification(str, TRUE, FILE_NOTIFY_CHANGE_FILE_NAME);

    WaitForSingleObject(file, INFINITE);

    while (true)
    {
        FindNextChangeNotification(file);
        WaitForSingleObject(file, INFINITE);
    }

    FindCloseChangeNotification(file);
}




Bearbeitung von typecast:
cpp-Tags korrigiert Das hätte ich von dir nicht erwartet

--
class God : public ChuckNorris { };

Dieser Post wurde am 24.06.2004 um 13:41 Uhr von typecast editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
24.06.2004, 12:29 Uhr
aklaeser



Hi danke für die Hilfe bis dahin funktioniert jetzt alles jetzt hab ich nur noch folgendes Problem:

wenn ich mein Programm hiermit aufrufe:


C++:
    ini = fopen("C:\\dir.ini", "r");

    while (!feof(ini))
    {
        fscanf(ini, "%s\n", str1);
        if (str1[0] != '[')
        {
            str = str1;
            str.Delete(0, 5);

            _beginthread( Thread_Watch, 0, (void*)(LPCTSTR)str);
            _beginthread( Thread_Acc, 0, (void*)(LPCTSTR)str);
        }
    }




und jetzt in der ini-Datei zwei Pfadangaben stehen: sieht so aus:


Code:
[dir]
pfad=C:\\test2
pfad=C:\\test



dann werden die threads zwar gestartet aber es wird nur noch mit dem letzten pfad gearbeitet, also pfad=C:\\test2 wird nicht mehr benutzt woran leigt das?

Dieser Post wurde am 24.06.2004 um 23:52 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
24.06.2004, 23:43 Uhr
~Johan
Gast


hi aklaeser. könntest du vieleicht den ganzen Programm samt #Include hier posten. ich brauche genau den gleichen Programm. Ich würde unheimich freuen.
Danke

Johan
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
25.06.2004, 14:18 Uhr
aklaeser



@Johan

hi hab das Programm in dem anderen Thread von mir gepostet kannst dirs ja mal anschauen!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
26.06.2004, 01:03 Uhr
~Johan
Gast


wo hast du den das gepostet. ich sehe es nicht. Kannst du bitte denn ganzen code samt include dateien hier nochmal posten weil ich das program bei mir probiert habe und ich bekomme viele fehler meldungen.
Danke nochmal
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: