Название: запись в файл с нескольких потоков. Отправлено: Dima1985 от Октябрь 26, 2011, 15:30 привет.
есть статическая ф-я Код: static void SaveString(QString str, uint time, int index); Как сделать чтобы все записи были успешны і не мешали руг другу.? тоесть если одновремено поток а і б начнет писать в файл , что в нем окажется? Название: Re: запись в файл с нескольких потоков. Отправлено: SimpleSunny от Октябрь 26, 2011, 18:06 A и B не смогут одновременно писать, если А открыл файл на запись, то В уже этого не сможет сделать.
Используйте статический QMutex. Код
Название: Re: запись в файл с нескольких потоков. Отправлено: Dima1985 от Октябрь 26, 2011, 18:21 A и B не смогут одновременно писать, если А открыл файл на запись, то В уже этого не сможет сделать. Хм Код: int ia =0; Цитировать Используйте статический QMutex. Код
про QMutex можно подробней ? я ним никогда не пользовался. как QMutex указать мою ф-ю? Название: Re: запись в файл с нескольких потоков. Отправлено: Авварон от Октябрь 26, 2011, 18:24 SimpleSunny
сможет Название: Re: запись в файл с нескольких потоков. Отправлено: SimpleSunny от Октябрь 26, 2011, 18:42 SimpleSunny Хмм, заблуждался значит я (:сможет про QMutex можно подробней ? я ним никогда не пользовался. Где и как объявлена эта функция?как QMutex указать мою ф-ю? Название: Re: запись в файл с нескольких потоков. Отправлено: Igors от Октябрь 26, 2011, 19:09 Нет никакой необходимости каждой нитке открывать файл по записи - адресное пр-во общее, ну одна открыла, потом все пишут. Засисяться мутексом видимо придется (хотя ОС защищает саму запись, но есть еще и QFile, а там безопасности не обещали). Но все это мелочи - главное что вся затея не продумана. В каком порядке данные должны быть записаны в файл? Если просто "каждый пишет когда захочет" - ну и будут в любом и невоспроизводимо (т.е. новый запуск - новый результат). Это нормально напр для лог файла - но не более
Название: Re: запись в файл с нескольких потоков. Отправлено: Dima1985 от Октябрь 26, 2011, 19:33 SimpleSunny Хмм, заблуждался значит я (:сможет про QMutex можно подробней ? я ним никогда не пользовался. Где и как объявлена эта функция?как QMutex указать мою ф-ю? Код: class mySave основное прилож -> имеет виджеты в которых иногда обработчик таймера пишет строку пишут так : Код: mySave::saveStr("String", QDateTime::curentQdateTime()) Название: Re: запись в файл с нескольких потоков. Отправлено: SimpleSunny от Октябрь 26, 2011, 20:33 Код
в *.cpp QMutex mySave::MyMutex; Но следует помнить, что пока 1 поток пишет что-то в файл, второй "заснет" на строчке QMutexLocker locker(&MyMutex);. Если пишут достаточно часто и много, то лучше сделать по-другому. Название: Re: запись в файл с нескольких потоков. Отправлено: andrew.k от Октябрь 26, 2011, 21:18 Лучше сделать один класс в основном потоке, который и будет писать в файл.
А остальные потоки просто передают че писать. Т.к. это файл журнала, то порядок не важен. Код
Примерно так. Никаких проблем не должно быть. |