Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Problem mit Schleife und _beginthread()

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
25.06.2004, 09:57 Uhr
aklaeser



Hie hab folgendes Problem und zwar hab ich folgende Funktion:


C++:
int main(int argc, char* argv[])
{
    int a;

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

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

    int counter = 0;

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

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

    printf("%d\n", counter);

    cin >> a;
    fclose(ini);
    ////////////////////////////////////////////////////////////
    return 0;
}




1. Problem:
Wenn jetzt die MessageBox erscheint, erscheint die 4 mal obwohl sie nur 2 mal erscheinen dürfte denn ich hab nur 2 einträge in der Datei die ich auslese!
Woran liegt das?

2. Problem

Startet beginthread nicht immer einen neuen Thread, denn er arbeitet immer nur mit dem letzten eintrag den ich auslese, der erste wird nicht mehr benutzt??


Danke für Eure Hilfe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.06.2004, 11:22 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


hmm ist mit so wenig code schwer zu sagen...
zeig mal noch die threadprozeduren... und den inhalt deiner datei die du ausliest

übrigens ist nicht so wichtig aber weil einige mods einem gerne bei postings ins falsche forum den Kopf abhacken...
CString ist eine Klasse der MFC
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 25.06.2004 um 11:22 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.06.2004, 11:25 Uhr
aklaeser



OK! Sorry dann fürs falsche Forum!

Aber hier mal der ganze Code:


C++:
// dirCon.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung.
//
#include "stdafx.h"
#define _WIN32_WINNT 0x0400

#include <afx.h>

#include <process.h>
#include <afxmt.h>
#include <AFXPRIV.H>

#include <Windows.h>
#include <iostream>

using namespace std;


void Thread_Acc(void* arg);
void Thread_Watch(void* arg);

//*******************************************************************
//Hauptprogramm
int main(int argc, char* argv[])
{
    int a;

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

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

    int counter = 0;

    while (!feof(ini))
    {
        fscanf(ini, "%s\n", str1);
        printf("%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);
            counter++;    
            //AfxMessageBox(str);
        }
    }

    printf("%d\n", counter);

    cin >> a;
    fclose(ini);
    ////////////////////////////////////////////////////////////
    return 0;
}

//********************************************************************
//Funktion zum erkenn der Dateiverschiebungen
void Thread_Watch(void* arg)
{
    HANDLE file;
    CString str = (LPCTSTR)arg;
    file = FindFirstChangeNotification(str, TRUE, FILE_NOTIFY_CHANGE_FILE_NAME);

    WaitForSingleObject(file, INFINITE);

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

    FindCloseChangeNotification(file);
}

//********************************************************************
//Erkennen welche Datei verändert wurde
void Thread_Acc(void* arg)
{
    USES_CONVERSION;
    CString str = (LPCTSTR)arg;
    AfxMessageBox(str);
    HANDLE hDir = CreateFile(str,
                            FILE_LIST_DIRECTORY,
                            FILE_SHARE_READ | FILE_SHARE_DELETE | FILE_SHARE_WRITE,
                            NULL,
                            OPEN_EXISTING,
                            FILE_FLAG_BACKUP_SEMANTICS,
                            NULL);

    FILE_NOTIFY_INFORMATION Buffer[1024];
    DWORD BytesReturned;
    int i = 0;

    while (ReadDirectoryChangesW(hDir,
                                &Buffer,
                                sizeof(Buffer),
                                TRUE,
                                FILE_NOTIFY_CHANGE_SECURITY        |
                                FILE_NOTIFY_CHANGE_CREATION        |
                                FILE_NOTIFY_CHANGE_LAST_ACCESS    |
                                FILE_NOTIFY_CHANGE_LAST_WRITE    |
                                FILE_NOTIFY_CHANGE_SIZE            |
                                FILE_NOTIFY_CHANGE_ATTRIBUTES    |
                                FILE_NOTIFY_CHANGE_DIR_NAME        |
                                FILE_NOTIFY_CHANGE_FILE_NAME,
                                &BytesReturned,
                                NULL,
                                NULL))
    {
        CString filename = "";
        CString t_filename = "";

        switch (Buffer[0].Action)
        {
        case FILE_ACTION_ADDED:
            filename = CString(Buffer[i].FileName).Left(Buffer[i].FileNameLength /2);
            //AfxMessageBox(filename);
            filename = str + "\\" + filename;
            printf("Datei hinzugefuegt oder geloescht\n");

            t_filename = filename;
            t_filename.Delete(filename.GetLength() - 3, 3);
            //Kopie der Datei erstellen im selben Ordner die die richtigen Securityeisntellungen hat
            CopyFile(filename, t_filename, FALSE);
            //Original löschen
            DeleteFile(filename);
            //Kopie in Original umbenennen
            CopyFile(t_filename, filename, FALSE);
            //Kopie löschen
            DeleteFile(t_filename);
            break;
        case FILE_ACTION_REMOVED:
            filename = CString(Buffer[i].FileName).Left(Buffer[i].FileNameLength /2);
            //cout << "Datei entfernt" << endl;
            break;
        case FILE_ACTION_MODIFIED:
            filename = CString(Buffer[i].FileName).Left(Buffer[i].FileNameLength /2);
            //cout << "Attribute geaendert" << endl;
            break;
        }
    }
}




und hier der Inhalt der Datei:



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




Hoffe das hilft Euch!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.06.2004, 14:17 Uhr
aklaeser



Hi

hat sich erledigt hab den Fehler gefunden, musste mir nur ein Array erstellen mit den Dateinamen und dann einzeln daraufzugreifen!

Gruß
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
26.06.2004, 13:30 Uhr
~Johan
Gast


Hi aklaeser, ich habe gerade das programm versucht es zu compielieren aber der zeigt mit eine fehler:

test3.cpp
CProgramme\Microsoft Visual Studio\MyProjects\test4\test3.cpp(3) : fatal error C1083: Include-Datei kann nicht geoeffnet werden: 'stdafx.h': No such file or directory
Fehler beim Ausführen von cl.exe.

test3.obj - 1 Fehler, 0 Warnung(en)


Nur so als information: Ich benutze VC++ 6 als compiler.

thx. Johan
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.06.2004, 04:03 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


erstell mal eine neues defaultprojekt... da packt der immer eine stdafh.h mit rein... eigentlich wird das teil imho gar nicht gebraucht... wenn du mal reinguckst werden darin auch nur includierungen gemacht die du auch direkt selber von hand machen könntest, aber wenn du unbedingt die default stdafx.h haben willst einfach kopieren...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
27.06.2004, 15:21 Uhr
~Hohan
Gast


Hi, nun wieder die nächste Fehler. Ich bekomme am ende des Programmes folgende fehler:

dokumente und einstellungen\mirena.sony\desktop\c++2\testordner\test.cpp(159) : fatal error C1004: Unerwartetes Dateiende gefunden
Fehler beim Ausführen von cl.exe.

test.obj - 1 Fehler, 0 Warnung(en)
________________________________________________________________

Eine zweite Frage: Wenn ich ein Projekt unter VC++ 6 Pro. erstelle welche Projektart muss ich auswählen um das Programm hier oben ausführen zu können: Win32-Anwendung Win32-Konsolenanwendung

Danke Johan
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
28.06.2004, 09:02 Uhr
aklaeser



Hi musst Win32 Konsolenanwendung benutzen um das Projekt zu erstellen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
28.06.2004, 10:23 Uhr
aklaeser



Kann mir da vielleicht jemand noch helfen, wenn ich das oben besagt Programm benutze, funktioniert ja alles, nur wenn ich mehr als 1 Datei in einen anderen Ordner verschiebe, wird aber immer nur eine Datei erkannt, wie erkenn ich dass also mehr als eine Datei verschoben werden?

Lg Andreas
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
28.06.2004, 21:21 Uhr
~Johan
Gast


Hi läute.Irgwenwie bekomme ich das Programm nicht zum laufen. Ich erstelle ein Projekt(Win32-Konsolenanwendung/Eine einfache Anwendung)
dann erstelle ich eine leere c++ datei und anschließend kopiere ich den quellcode in das leere datei und versuche es zu compielieren, aber der sagt mit ständig das die datei #include "stdafx.h" nicht geöffnet werden kann.

Kann mir vieleicht jemanden helfen oder vieleicht das Projekt samt header und das programm per mail zu schicken.
Ich benutze VC++ 6 Pro.

Ich würde mich sehr sehr freuen für eure hilfe Jungs.
Danke
mein email:gayby63@yahoo.de
 
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: