Нужно сделать вектор со структурой, содержащей вектор из структур, содержащих мьютекс.
Кусок кода, отвечающий за работу с мьютексом
struct CommandQueue_leaf {
struct MyMessen mes;
unsigned char status;
};
struct MutexList {
std::string text;
std::mutex mutex;
};
struct CommandQueue {
std::vector<struct CommandQueue_leaf> mes;
std::vector<struct MutexList> UsedFiles;
};
...
// Главный цикл
struct CommandQueue* cm...
struct MutexList* res = (struct MutexList*)malloc(sizeof * res);
res->text = str;
cm->UsedFiles.push_back(*res);
free(res);
...
// В потоках
cm->UsedFiles[mutexnum].mutex.lock();
cm->UsedFiles[mutexnum].mutex.unlock();
...
// Главный цикл
//Очистка
cm->mes.clear();
cm->UsedFiles.clear();
При компиляции пишет:
Ошибка C2280: "MutexList::MutexList(const MutexList &)": предпринята попытка ссылки на удаленную функцию Server
Мьютекс невозможно ни скопировать, ни даже перенести. Поэтому вам надо использовать какой-нибудь перемещаемых контейнер для мьютекса, например std::unique_ptr
, и переносить его через std::move
. И да, забудьте про malloc
- вызовов этой функции в плюсовом коде быть не должно. В данном случае, указатели вообще не требуются:
struct MutexList {
std::string text;
std::unique_ptr<std::mutex> mutex;
};
// ...
MutexList res;
res.text = ...;
res.mutex = std::make_unique<std::mutex>();
cm->UsedFiles.push_back(std::move(res));
// ...
cm->UsedFiles[mutexnum].mutex->lock();
Виртуальный выделенный сервер (VDS) становится отличным выбором
В данном фрагменте кода я пытаюсь вывести некий график с двумя SeriesДля более быстрого вывода я удаляю, заполняю Series и затем добавляю их обратно
Можно ли добавить программу в автозагрузку с помощью C/C++? (без WinAPI)