सी ++ 11 बाहर आने के बाद, और यदि आपका C++ 11 समर्थित संकलक का उपयोग कर रहे हैं, तो आप लैम्ब्डा, variadic टेम्पलेट समारोह और अतुल्यकालिक धागा का उपयोग आसानी से ग में जावास्क्रिप्ट समारोह ++ अनुकरण करने के लिए कर सकते हैं।
यहाँ, कोड मैं setTimeOut के लिए लिखा है यह पूरी तरह से परीक्षण किया जाता है
setTimeOut funtion की परिभाषा:
#include <windows.h>//different header file in linux
#include <future>
using namespace std;
template <typename... ParamTypes>
void setTimeOut(int milliseconds,std::function<void(ParamTypes...)> func,ParamTypes... parames)
{
std::async(std::launch::async,[=]()
{
Sleep(milliseconds);
func(parames...);
});
};
इस समारोह सी + 11 की variadic टेम्पलेट का उपयोग करके चर तर्क स्वीकार करता है, कोड कर सकते हैं आपको इसका उपयोग कैसे करें:
#include <iostream>
#include <thread>
#include <string>
#include <functional>
#include <windows.h>
#include <future>
using namespace std;
int main()
{
std::mutex locker;
std::function<void()> func1 = [&]()
{
std::unique_lock<std::mutex> lk(locker);
std::cout << "func 1 is trigged:" << " no parameter" << std::endl;
lk.unlock();
};
std::function<void(int)> func2 = [&](int param)
{
std::unique_lock<std::mutex> lk(locker);
std::cout << "func 2 is trigged:" << " int: " << param <<std::endl;
lk.unlock();
};
std::function<void(int,std::string)> func3 = [&](int param1,std::string param2)
{
std::unique_lock<std::mutex> lk(locker);
std::cout << "func 3 is trigged:" << " int: " << param1 << "; string: " << param2 << std::endl;
lk.unlock();
};
for(int index=0;index<100;index++)
{
std::unique_lock<std::mutex> lk1(locker);
std::cout << "set timer for func 1" << std::endl;
lk1.unlock();
setTimeOut<>(1000,func1);
std::unique_lock<std::mutex> lk2(locker);
std::cout << "set timer for func 2" << std::endl;
lk2.unlock();
setTimeOut<int>(2000,func2,10000);
std::unique_lock<std::mutex> lk3(locker);
std::cout << "set timer for func 3" << std::endl;
lk3.unlock();
setTimeOut<int,std::string>(5000,func3,10000,"ddddd");
}
Sleep(10000000);
}
क्या नींद() उस चीज़ को काम करती है जिसे आप ढूंढ रहे हैं? –
वास्तव में नहीं।मैं चाहता हूं कि प्रोग्राम चलना जारी रखे और बाद में इन्हें – bobobobo
पर कॉल करें, आप किस मंच पर हैं? – avakar