• Как правильно обрабатывать изображения в стороннем потоке?

    @Mercury13
    Программист на «си с крестами» и не только
    Что я пока вижу.
    1. В любой высокоуровневой библиотеке CreateThread использовать ЗАПРЕЩЕНО, вместо этого используй beginthreadex (или что-то ещё, предоставленное библиотекой). Или, раз уж ты по-чёрному используешь VCL, особо не убудет, если будешь использовать TThread.
    2. Lock и Unlock — это обыкновенный мьютекс. Все конкурирующие потоки, кому захочется рисовать на холсте, ждут и курят, ничего не делая.
    3. Самое-то главное ты упустил. Если ждёшь помощи, не нужно так секретничать, что не поймёшь, в чём дело. Где — хотя бы примерно — тело потока, и что делается в главном потоке?
    4. А как надо работать? Есть некая структура данных, в которой мы возвращаем из потока обработанные картинки, и volatile bool isWorking, который отвечает за то, работает поток или нет. Когда этот флажок false, главный поток имеет право работать с нашей структурой. Он переключается в true — в структуре может быть любой мусор, обращаться к ней запрещено! Если ещё и надо предупредить, когда поток закончился и можно забирать информацию — TThread.Synchronize или PostMessage. То и другое работает только в GUI-программах, если консольная — то через события (CreateEvent).
    5. А почему «нельзя этого делать»? Если партия приказала, значит, надо. Просто многопоточность — это тяжёлое дело, ошибки на каждом шагу, но «принципиально нельзя» — нет такого.
    Ответ написан
    4 комментария
  • Как сделать вычитание двух файлов в perl?

    @pcdesign
    Если я правильно понял вопрос.
    Пусть у нас есть два файла 1.txt и 2.txt
    cat 1.txt                                                                                                                                   
    100
    2323
    2390238
    32322323
    9002


    cat 2.txt 
    34
    4343
    434
    2390238
    32322323
    9002


    С таким содержанием.
    Теперь их можно сравнить и вычислить разницу таким образом:

    #!/usr/bin/env perl 
    use strict;
    use warnings;
    use utf8;
    use File::Slurp;
    use Array::Utils qw(:all);
    
    my @arr1 = read_file( '1.txt', chomp => 1 );
    my @arr2 = read_file( '2.txt', chomp => 1 );
    
    # Получилось 2 массива. 
    # Теперь сравниваем их c помощью use Array::Utils qw(:all);
    # И вычисляем разницу
    # Получаем элементы из массива @аrr1, которые не входят в массив @arr2
    
    
    my @minus = array_minus( @arr1, @arr2 );
    
    for my $i (@minus){
            print "$i \n";
    }


    Результат работы:
    100 
    2323


    Теперь можно то что находится в массиве @minus записать в файл да и все.
    Ответ написан
    1 комментарий
  • Как в Perl писать в Named Pipe?

    @pcdesign
    #!/usr/bin/perl -w
    while (1) {
        open(FIFO, "> \\\\.\\pipe\\mypipe")
            or die "writing: $!\n";
        print FIFO "The current time is ", scalar(localtime), "\n";
        close FIFO;
        sleep 1;
    }


    или
    IO::Pipe
    Ответ написан
    4 комментария
  • Как в java перевести timestamp в дату?

    ehabarov
    @ehabarov
    IT Specialist
    "Оптимизированная" версия варианта, предложенного jack
    Calendar ИМХО избыточен, достаточно java.util.Date.
    Ответ написан
    Комментировать
  • Как в java перевести timestamp в дату?

    jask
    @jask
    Разработчик
    Я бы сделал таким образом
    Ответ написан
    Комментировать