Который лучше для окон? pthreads или CreateMutex?

Perl.

use Lingua::EN::Numbers qw(num2en_ordinal);
print 'On the ', num2en_ordinal($_+1),' day of Christmas my true love gave to me, ', reverse(( split /\|/, "a partridge in a pear tree.\n|two turtle doves, and |three french hens, |four calling birds, |five gold rings, |six geese a-laying, |seven swans a-swimming, |eight maids a-milking, |nine ladies dancing, |ten lords a leaping, |eleven pipers piping, |twelve drummers drumming, ")[ 0 .. $_ ]) for 0 .. 11;

(459 Символов)

Я хотел сделать это немного более хорошим и выразительным, но это - проблема гольфа.

Этот стиль нарушает надлежащие стандарты кодирования несколько. Но это - гольф для Вас.

Язык:: EN:: Число

Вот менее компактная версия с менее подлыми приемами.

use Lingua::EN::Numbers qw(num2en_ordinal);
my @gifts = (
    'a partridge in a pear tree.',
    'two turtle doves, and ',
    'three french hens, ',
    'four calling birds, ',
    'five gold rings, ',
    'six geese a-laying, ',
    'seven swans a-swimming, ',
    'eight maids a-milking, ',
    'nine ladies dancing, ',
    'ten lords a leaping, ',
    'eleven pipers piping, ',
    'twelve drummers drumming, '
);
for my $verse_id ( 0 .. $#gifts ) {
    printf 'On the %s day of Christmas my true love gave to me, ', num2en_ordinal($verse_id +1);
    print reverse @verse[ 0 .. $verse_id ];
    print "\n";
}

8
задан puffadder 10 July 2009 в 15:52
поделиться

6 ответов

Одна вещь, которую вы должны помнить, - это то, что ждет этот код в будущем. Планируете ли вы разрабатывать (и выпускать) на обеих платформах в будущем? Или это односторонний перенос?

Лучшее, что можно сделать при переносе проекта, - сохранить как можно меньше фактических изменений кода. В вашем случае это будет означать использование решения pthread. При этом, если вы планируете сделать это односторонним портом, переход на родной язык никогда не повредит. :)

Я бы потратил некоторое время на то, чтобы полностью изучить обе стратегии, а затем реализовать ту, которая вам удобнее всего.

3
ответ дан 5 December 2019 в 10:43
поделиться

Все будет одинаково (pthreads просто вызовет EnterCriticalSection и т. Д.), Поэтому, если у вас есть оболочка pthreads, вам, вероятно, следует использовать ее, чтобы не нужно изменить столько же кода

7
ответ дан 5 December 2019 в 10:43
поделиться

В приложениях Windows C / C ++, которые используют CRT, необходимо вызвать beginthread / beginthreadex , чтобы правильно инициализировать CRT в новом потоке.

0
ответ дан 5 December 2019 в 10:43
поделиться

Почему бы не взять лучшее из обоих миров и не использовать библиотеку, которая включает в себя как pthreads, так и Window API, и использует подходящий из них? Ваш код остается одинаковым на обеих платформах.

В C ++ нет недостатка в таких библиотеках, поэтому я не могу представить, что там нет версий C.

0
ответ дан 5 December 2019 в 10:43
поделиться

Совершенно верно. Либо реализуйте IDynamicMetaObjectProvider , либо унаследуйте от DynamicObject для гораздо более простого маршрута. См. Несколько хороших примеров в документации DLR .

Вот быстрый пример DynamicObject :

using System;
using System.Dynamic;

public class MyDynamic : DynamicObject
{
    public override bool TryInvokeMember
        (InvokeMemberBinder binder,
         object[] args,
         out object result)
    {
        Console.WriteLine("I would have invoked: {0}",
                          binder.Name);
        result = "dummy";
        return true;
    }

    public string NormalMethod()
    {
        Console.WriteLine("In NormalMethod");
        return "normal";
    }
}

class Test
{
    static void Main()
    {
        dynamic d = new MyDynamic();
        Console.WriteLine(d.HelloWorld());
        Console.WriteLine(d.NormalMethod());
    }
}

У меня есть более крупный пример DynamicObject в 2-м издании C # в деталях , но я еще не реализовал IDyamicMetaObjectProvider . Я сделаю это до выпуска книги, но в настоящее время в выпуске раннего доступа есть только пример DynamicObject . Кстати, если купишь сегодня за полцены - используйте код twtr0711 . Я отредактирую этот ответ позже, чтобы удалить этот бит :)

1
ответ дан 5 December 2019 в 10:43
поделиться

this works well: http://sourceware.org/pthreads-win32/

It is a port of the pthreads library for Windows.

5
ответ дан 5 December 2019 в 10:43
поделиться
Другие вопросы по тегам:

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