Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C++;_C++ - Fatal编程技术网

C++ 在C++;

C++ 在C++;,c++,C++,在JavaScript中,有一个名为setInterval()的函数。它能在C++中实现吗?如果使用循环,程序不会继续,而是继续调用函数 while(true) { Sleep(1000); func(); } cout<<"Never printed"; while(true){ 睡眠(1000); func(); } 不能使用std::thread来实现 // <thread> should have been included void setIn

在JavaScript中,有一个名为
setInterval()
的函数。它能在C++中实现吗?如果使用循环,程序不会继续,而是继续调用函数

while(true) {
    Sleep(1000);
    func();
}
cout<<"Never printed";
while(true){
睡眠(1000);
func();
}

不能使用
std::thread
来实现

// <thread> should have been included
void setInterval(auto function,int interval) {
    thread th([&]() {
        while(true) {
            Sleep(interval);
            function();
        }
    });
    th.detach();
}
//...
setInterval([]() {
    cout<<"1 sec past\n";
},
1000);
//应该包括在内
无效设置间隔(自动功能,整数间隔){
螺纹th([&](){
while(true){
睡眠(间歇);
函数();
}
});
th.detach();
}
//...
setInterval([](){

CUT< P> C++中没有内置代码<代码StTeals。可以用异步函数模拟这个函数:

template <class F, class... Args>
void setInterval(std::atomic_bool& cancelToken,size_t interval,F&& f, Args&&... args){
  cancelToken.store(true);
  auto cb = std::bind(std::forward<F>(f),std::forward<Args>(args)...);
  std::async(std::launch::async,[=,&cancelToken]()mutable{
     while (cancelToken.load()){
        cb();
        std::this_thread::sleep_for(std::chrono::milliseconds(interval));
     }
  });
}
但是请注意,这个mchanism为任务构造了一个新线程。它不适用于许多间隔函数。在这种情况下,我将使用已经编写的线程池和某种时间测量机制

编辑:示例使用:

int main(int argc, const char * argv[]) {
    std::atomic_bool b;
    setInterval(b, 1000, printf, "hi there\n");
    getchar();
}

void setInterval(){}
…但我假设您也在要求JavaScript函数的功能性…那到底是什么呢?---没关系,简短的回答:是的,可以实现。较长的回答:要真正模拟JavaScript
setInterval
功能,您需要实现某种形式的同步上下文和调度系统由于JavaScript是单线程的,因此
setInterval
的所有处理程序调用都被分派到“主”线程。这对于从头开始实现来说是非常重要的。下一个挑剔:不包括特定于平台的函数
Sleep()
。我建议改为使用。为什么它说
线程未在此范围内声明
我使用的是
g++-std=c++11
编译器你能给我一个例子来说明如何使用它吗?c++优点的完美例子:内部丑陋,外部界面非常漂亮。@DevSolar:是的,这个例子鼓励你我想进一步探讨C++的用法:使用代码> STD::绑定< /代码>?这是否比写“代码> f(STD::Ord:ARG)…)有任何优势?
在while循环中?这不会复制JavaScript的
setInterval
。此实现会漂移。首先,它不考虑执行
cb()
/
f()所需的时间
,也不尊重
sleep\u的语义。这可能是问题,也可能不是问题,但应该在回答中指出。
int main(int argc, const char * argv[]) {
    std::atomic_bool b;
    setInterval(b, 1000, printf, "hi there\n");
    getchar();
}