$loop = React\EventLoop\Factory::create();
$loop->addPeriodicTimer(5, function () {
//Код
});
$loop->run();
$nullFlag = true;
if($time > 12:00 && < 13:00 && $nullFlag) {
//обнуляем массив
$nullFlag = false;
} elseif ($time > 13:00) {
$nullFlag = true;
}
$file_path = "/home/daemon/clear_array.do";
if(file_exists($file_path)) {
//Очивщаем массив
unlink($file_path);
}
public partial class Form1 : Form
{
private Panel TableContainer = new Panel();
private NumericUpDown Columns = new NumericUpDown();
private NumericUpDown Rows = new NumericUpDown();
public Form1()
{
InitializeComponent();
this.Width = 420;
var flowLayoutPanel = new FlowLayoutPanel();
var LabelColumns = new Label();
var LabelRows = new Label();
var Create = new Button();
// панель для редактора таблицы
flowLayoutPanel.SuspendLayout();
flowLayoutPanel.AutoSize = true;
flowLayoutPanel.Controls.Add(LabelColumns);
flowLayoutPanel.Controls.Add(Columns);
flowLayoutPanel.Controls.Add(LabelRows);
flowLayoutPanel.Controls.Add(Rows);
flowLayoutPanel.Controls.Add(Create);
flowLayoutPanel.Dock = DockStyle.Top;
flowLayoutPanel.Location = new Point(0, 0);
LabelColumns.AutoSize = true;
LabelColumns.Dock = DockStyle.Fill;
LabelColumns.ImageAlign = ContentAlignment.MiddleLeft;
LabelColumns.Location = new Point(3, 0);
LabelColumns.Size = new System.Drawing.Size(53, 29);
LabelColumns.Text = "Колонок:";
LabelColumns.TextAlign = ContentAlignment.MiddleLeft;
LabelRows.AutoSize = true;
LabelRows.Dock = DockStyle.Fill;
LabelRows.Location = new Point(117, 0);
LabelRows.Size = new Size(40, 29);
LabelRows.Text = "Строк:";
LabelRows.TextAlign = ContentAlignment.MiddleLeft;
Columns.Dock = DockStyle.Fill;
Columns.Location = new Point(62, 3);
Columns.Minimum = 1;
Columns.Size = new System.Drawing.Size(49, 20);
Columns.Value = 3;
Rows.Dock = DockStyle.Fill;
Rows.Location = new Point(163, 3);
Rows.Minimum = 1;
Rows.Size = new Size(49, 20);
Rows.Value = 2;
Create.AutoSize = true;
Create.Dock = DockStyle.Left;
Create.Location = new Point(218, 3);
Create.Size = new Size(75, 23);
Create.Text = "Создать";
Create.UseVisualStyleBackColor = true;
Create.Click += new System.EventHandler(CreateTable);
// контейнер для вывода готовой таблицы
TableContainer.Dock = DockStyle.Fill;
// добавляем необходимые элементы на форму
this.Controls.Add(flowLayoutPanel);
this.Controls.Add(TableContainer);
this.Controls.SetChildIndex(flowLayoutPanel, 1);
this.Controls.SetChildIndex(TableContainer, 0);
}
private void CreateTable(object sender, EventArgs e)
{
// удаляем предыдущую таблицу
TableContainer.Controls.Clear();
// создаем новую
var tableLayoutPanel = new TableLayoutPanel();
tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill;
tableLayoutPanel.Location = new System.Drawing.Point(0, 0);
tableLayoutPanel.Visible = true;
tableLayoutPanel.ColumnCount = Convert.ToInt32(Columns.Value);
tableLayoutPanel.RowCount = Convert.ToInt32(Rows.Value);
// генератор случайных чисел для раскраски панелей (чтобы было видно)
var rnd = new Random(DateTime.Now.Millisecond);
// определяем размер одной колонки и строки, в процентах
int width = 100 / tableLayoutPanel.ColumnCount;
int height = 100 / tableLayoutPanel.RowCount;
this.Text = String.Format("{0}x{1}", width, height);
// добавляем колонки и строки
for (int col = 0; col < tableLayoutPanel.ColumnCount; col++)
{
// добавляем колонку
tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, width));
for (int row = 0; row < tableLayoutPanel.RowCount; row++)
{
// добавляем строку
if (col == 0)
{
tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, height));
}
// добавляем цветную панель, чтобы было видно ячейку в таблице
var panel = new Panel();
panel.BackColor = Color.FromArgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255));
panel.Dock = DockStyle.Fill;
tableLayoutPanel.Controls.Add(panel, col, row);
}
}
// добавляем таблицу в контейнер
TableContainer.Controls.Add(tableLayoutPanel);
}
}
Выражение await не блокирует поток, в котором оно выполняется. Вместо этого оно указывает компилятору объявить оставшуюся часть асинхронного метода как продолжение ожидаемой задачи. Управление затем возвращается методу, вызвавшему асинхронный метод. Когда задача завершается, она вызывает свое продолжение и возобновляет выполнение асинхронного метода с того места, где она была прервана.
// без ожидания
Console.WriteLine(DateTime.Now);
Task.Run(() => { Thread.Sleep(5000); });
// этот код будет выполнен сразу
Console.WriteLine(DateTime.Now);
// ожидание с await
Console.WriteLine(DateTime.Now);
await Task.Run(() => { Thread.Sleep(5000); });
// этот код будет выполнен, только после завершения выполнения задачи
// текущий (вызывающий) поток не будет приостановлен
// (например, в Windows Form это будет хорошо видно)
Console.WriteLine(DateTime.Now);
Console.WriteLine(DateTime.Now);
var t = Task.Run(() => { Thread.Sleep(5000); });
t.Wait(); // ожидание выполнения задачи
// этот код будет выполнен, только после завершения выполнения задачи
// текущий (вызывающий) поток будет блокирован
// (например, в Windows Form это будет хорошо видно)
Console.WriteLine(DateTime.Now);
я не буду думаю писать какой то мультиплеер для gta 5 :DНу, судя по этой строчке, вопросу и тегам - мы даже и не сомневались ни на минуту!