帮助实现示例程序。我做得对还是有更简单的方法?好吧,我的程序挂在了线上auto r = f.get();
,当其中一个线程找到密钥时,如何让线程完成它们的工作?这是一个示例任务。它能在我的电脑上运行 3 年这一事实并不重要。
#include <iostream>
#include <future>
#include <vector>
#define KEY_PASS (0xFFAAFFAABBCCDDEE)
bool checkPass(uint64_t pass) {
return pass == KEY_PASS;
}
const uint64_t STEP = 0x1000000000000000;
uint64_t funcAsync(uint64_t begin) {
for (uint64_t i = 0; i < STEP; ++i) {
if (checkPass(begin + i)) {
return i;
}
}
return uint64_t(-1);
}
int main() {
// Пример без работы с потоками
// for (uint64_t i = 0; i < UINT64_MAX; ++i) {
// if (checkPass(i)) {
// std::cout << std::hex << i << std::endl;
// break;
// }
// }
// Пример с потоками
uint64_t i = 0;
std::vector<std::future<uint64_t>> v;
do {
v.push_back(std::async(std::launch::async, funcAsync, i));
i += STEP;
std::cout << (i >> 60) << " open threads" << std::endl;
} while (i != 0);
for (auto& f: v) {
auto r = f.get();
if (r != uint64_t(-1)) {
std::cout << std::hex << r << std::endl;
break;
}
}
}
1 个回答