Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254

    [c++ win32] Thread bloccante

    Salve,

    Ho un thread che fa degli accessi al disco (con la readfile) usando un handle al file di un altro thread..

    essendo che l'altro thread non "usa" direttamente quell'handle non ho previsto semafori o critical section per gestire tale handle.. infatti il thread legge solamente.. sul file non si scrive mai in tutto il programma..

    Ho notato che, per file sopra ai 2 o 3 gb, la read file inizia ad essere "lenta"..

    L'anomalia che ora vi riporto è questa..

    Visto che ho notato che il thread possessore dell'handle al file (ma non lo usa) si blocca quando l'altro thread lo usa in lettura, è possibile che la readfile sia bloccante?

    A me sembra un'assurdità, infatti senza semafori o altro come può un thread "fermarsi" perchè un altro usa una sua variabile?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Da MSDN:

    "Considerations for working with synchronous file handles:

    If lpOverlapped is NULL, the read operation starts at the current file position and ReadFile does not return until the operation is complete, and the system updates the file pointer before ReadFile returns."
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    ok questo mi era chiaro..

    infatti mi spetto che il thread che fa la readFile sia fermo in attesa che finisca.. ma l'altro? il possessore di tale handle (che poi non usa)

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    L'altro thread non usa l'handle e si blocca comunque?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    si.. in parole povere.. il mio è un filtro di source directshow.. il thread serve per riempire un buffer di 4 secondi di filmato..mentre il filtro deve continuare a inviare i fotogrammi che sono presenti in quantità nel buffer..

    ma ciò non avviene.. se la readFIle ci mette 400 millisecondi a leggere per quel periodo tutto il filtro (ovviamente su un thread a parte) è fermo.. tutto ciò senza lock, mutex, semafori o quant'altro..

  6. #6
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    aggiornamento: ho scovato nel codice, che ogni tot frames, aprivo un nuovo handle per aggiornare la durata del file..

    ora, non riesco a capire come le due cose siano dipendenti, ma eliminando la routine il problema sparisce..

    mi viene da pensare che se si usa la createfile su un file in uso da un'altro thread (anche se con handle diversi) la createFile si "fermi"..

    ma mi sembra totalmente illogico

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.