Почему мой вызов функции, который должен быть запланирован setTimeout, выполненным сразу? [дубликат]

15
задан outis 9 November 2011 в 21:39
поделиться

3 ответа

Аннотации не только для java они также существуют в c++, они так или иначе похожи на аннотации из java.

// MyCode.h
# include <CodeAnalysis/SourceAnnotations.h>
using namespace vc_attributes;
class CMyClass
{
public:
       void f ( [Pre ( Valid = Yes )] int *pWidth );
// code ...
};

// MyCode.cpp
#include "MyCode.h"
void CMyClass::f ( [Pre (Valid = Yes)] int pWidth )
{
}

Дополнительную информацию можно найти в MSDN: http://msdn.microsoft.com/en-us/library/ms182036 (VS.80) .aspx

-121--4553974-

Необходимо просто создать файл cron, а затем использовать exec для настройки этого cron:

$cron_file = 'cron_filename';
// Create the file
touch($cron_file); 
// Make it writable
chmod($cron_file, 0777); 
// Save the cron
file_put_contents($cron_file, '* * * * * your_command'); 
// Install the cron
exec('crontab cron_file');

Это требует, чтобы пользователь, под которым запущен PHP, имел право создавать crontabs. Этот файл cron по умолчанию заменяет любые другие cron для этого пользователя, поэтому не забудьте спросить пользователя, хочет ли он применить cron. Также убедитесь, что папка, в которую вы записываете файл crontab, доступна для записи.

-121--4321235-

При присвоении функции setTimeout в этой форме функция выполняется вместо передачи в setTimeout. У вас есть три альтернативы, чтобы сделать его работать:

Дайте сначала функцию, затем тайм-аут и параметры в качестве последних аргументов:

setTimeout(doRequest, proxytimeout, url, proxys[proxy]);

Или просто написать последовательность, которая будет вычислена:

setTimeout('doRequest('+url+','+proxys[proxy]+')', proxytimeout);

Третий стиль - передать анонимную функцию, которая вызывает функцию. Обратите внимание, что в этом случае вы должны сделать это в замыкании, чтобы предотвратить изменение значений в цикле, поэтому он получает бит хитрость:

(function(u, p, t) {
    setTimeout(function() { doRequest(u, p); }, t);
})(url, proxys[proxy], proxytimeout);

Второй формат является бит hacky, но работает, тем не менее, если аргументы скалярные значения (последовательности, ints и т.д.). Третий формат немного неясен, так что в этом случае первый вариант, очевидно, будет работать лучше для вас.

14
ответ дан 1 December 2019 в 04:27
поделиться

Вы неправильно поняли функцию setTimeout.

Функция setTimeout принимает функцию и выполняет ее позже.
Записывая setTimeout(doRequest(url,proxyys[proxy]), proxytimeout), вы _вызываете функцию doRequest (немедленно) и передаете результат (предполагая, что она возвращает другую функцию) в setTimeout.

Вам нужно передать параметры doRequest в setTimeout, например:

setTimeout(doRequest, proxytimeout, url, proxys[proxy]);

Это передаст setTimeout самой функции doRequest (без ее первого вызова), а также передаст ей параметры для передачи в doRequest, когда она в конце концов вызовет ее.

0
ответ дан 1 December 2019 в 04:27
поделиться

Эта линия Вот проблема:

setTimeout(doRequest(url,proxys[proxy]), proxytimeout);

написание Dorequest () на самом деле вызывает функцию. То, что вы хотите, это пропустить саму функцию:

setTimeout(doRequest, proxytime, url, proxys[proxy]);
1
ответ дан 1 December 2019 в 04:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: