Как Вы пишете для *все* телефоны/мобильные устройства одновременно?

Параллелизм о Вашем коде, делающем несколько вещей одновременно. Это обычно делается с явными "потоками", но существуют другие возможности. Например, при использовании директив OpenMP в коде тогда компилятор, что OpenMP поддержек автоматически генерирует потоки для Вас.

Поток короток для "потока выполнения". В однопоточной программе C++ выполнение запускается в основном (), и затем продолжается последовательным способом. В многопоточной программе первый поток запускается в основных, но дополнительных потоках, может быть запущен приложением, которые запускаются в определенной пользователями функции. Они тогда работают одновременно, или параллельно с исходным потоком.

В C++ 0x потоки запускаются с помощью std::thread класс:

void my_function()
{
    // do stuff
}
std::thread my_thread(my_function); // run my_function in its own thread

новый C++ 0x стандарт также поддерживает:

  • атомарные значения и операции с std::atomic<> шаблон класса,
  • взаимные исключения для защиты данных (std::mutex, std::recursive_mutex, и т.д.)
  • классы блокировки для простоты руководящего времени жизни блокировки (std::lock_guard<>, std::unique_lock<>)
  • std::lock и std::try_lock функции для управления получением нескольких блокировок одновременно, не рискуя мертвой блокировкой
  • условные переменные для упрощения ожидания события (std::condition_variable, std::condition_variable_any)
  • фьючерсы, обещания и упакованные задачи упростить передающие данные между потоками и ожидание значения для чтения. Это обращается к классику, "как я возвращаю значение из потока" вопрос.
  • ориентированная на многопотоковое исполнение инициализация локальных статических объектов
  • thread_local ключевое слово для объявления локальных данных потока

я дал более подробный обзор нового C++ 0x библиотека потока в моей статье о devx.com: Более простая Многопоточность в C++ 0x

я пишу о многопоточности и параллелизме в C++ на [1 113] мой блог . Я также пишу книгу по теме: Параллелизм C++ в Действии .

9
задан Rap 4 December 2009 в 21:05
поделиться

7 ответов

Рассмотрите возможность внедрения ваших приложений через Интернет. Это нарушает ваше предпочтение «избегать подключения ваших пользователей к Интернету», но следует учитывать Интернет по следующим причинам:

  1. Если ваши приложения C # были написаны правильно, вы могли бы предоставить этим приложениям веб-интерфейс. путем повторного использования существующих библиотек.
  2. Web 2.0 поддерживается почти всеми современными мобильными платформами.
  3. Ваши разработчики могут продолжать писать на том языке, к которому они привыкли (C #).
  4. Там много преимуществ написания веб-приложений по сравнению с приложениями для конкретных платформ.
7
ответ дан 4 December 2019 в 08:52
поделиться

Consider Appcelerator Titanium, Rhomobile's Rhodes, PhoneGap, xmlvm.org, or other cross-device toolkits.

5
ответ дан 4 December 2019 в 08:52
поделиться

I make the assumptions that you have already done your market research and actually knows that all platform will be profitable, and not just drain your resources developing for one or two.

There is no great answer unless you break the "no connect to internet" rule. But there is a good answer; plain old C.

Implement all application logic in plain old C. Then;

  • iPhone - Objective-C is a strict superset of C, so just use the code as is. And write a UI in Objective-C using Cocoa Touch.

  • Android - Android's Java have JNI for calling native code written in C. Write a thin glue layer, and implement your UI with normal Java for Android.

  • Windows Mobile - You can call native code from any .NET application. So write another thing glue layer, and implement your UI using C# or your prefered .NET language.

  • Symbian - Symbian uses a variant of C++, so just like on iPhone you can call your C code as is. Write your UI using C++ and Symbian API:s.

If you break the "no connect to internet" rule then implementing the server with your existing C# code and exposing it as a web service using HessianC# is a snap. And then Hessian implementations are available for every phone that you can install an application on, that has been sold since 2002 or so.

4
ответ дан 4 December 2019 в 08:52
поделиться

I suggest you to separate the core of your application and the GUI. So you can continue to develop your applications in C# for Windows mobile and iPhoneOS (thanks to monoTouch). With this strategy you have only to develop the specific GUI on Windows mobile (C#) and iPhone (Cocoa Touch).

For other mobile os you can not use a cross platform dev env (for now). You need to redevelop all you application.

So:

  • Windows Mobile: Core(C#) & GUI(C#)
  • iPhone: Core(C#) & GUI(Cocoa Touch)
  • Android: Core(Java) & GUI(Java)
  • Other: depends on OS
3
ответ дан 4 December 2019 в 08:52
поделиться

Виртуализация

В зависимости от вашей спешки я услышал, что VMWare работает над продуктом для мобильной виртуализации, который позволит объединить платформы в единую точку выполнения в виртуальной машине на мобильном устройстве. Он почти наверняка будет поддерживать большинство платформ смартфонов (Windows Mobile, Android, Symbian, Blackberry и, возможно, даже iPhone). Они (и мы) определенно выиграют больше всего, если поддержат их всех.

Если вы никуда не торопитесь, возможно, подождите немного.

2
ответ дан 4 December 2019 в 08:52
поделиться

With a c# application for the Iphone check out Monotouch. Its the OSS version of the .net framework for the iphone.

1
ответ дан 4 December 2019 в 08:52
поделиться

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

Я думаю, зачем вам делать 2- 5 версий вашего приложения, которые, в лучшем случае, получат умеренный прием на всех платформах? Потому что это то, что вы получите.

Если вы хотите создавать приложения, которые будут хорошо приняты и заинтересовать пользователей их использованием, заставьте их воспользоваться преимуществами платформы. Приложения для iPhone должны иметь хорошо продуманный пользовательский ввод и использовать все возможности платформы, такие как Mutl-Touch, удобное хранение данных, акселерометры, камеру и т. д.

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

Приложения Android могут гораздо более тесно интегрироваться с системой, поэтому позвольте им делать именно это на благо пользователя.

Ваше главное преимущество любого приложения должно заключаться в том, что вы полностью понимаете предметную область и можете описать, какие аспекты проблемной области лучше всего работают с сильными сторонами любого данного устройства. Мобильные приложения малы (иш), и любая небольшая выгода, которую вы получаете от попытки совместного использования кода между устройствами (и как это работает именно на Java / Obj-C, не говоря уже о различиях между библиотеками Android и Blackberry?), Полностью теряется из-за искажения вашего понимание через призму аккомодации.

и может описать, какие аспекты проблемной области лучше всего работают с сильными сторонами того или иного устройства. Мобильные приложения малы (иш), и любая небольшая выгода, которую вы получаете от попыток совместного использования кода между устройствами (и как это работает именно на Java / Obj-C, не говоря уже о различиях между библиотеками Android и Blackberry?), Полностью теряется в искажении вашего понимание через призму аккомодации.

и может описать, какие аспекты проблемной области лучше всего работают с сильными сторонами того или иного устройства. Мобильные приложения малы (иш), и любая небольшая выгода, которую вы получаете от попытки совместного использования кода между устройствами (и как это работает именно на Java / Obj-C, не говоря уже о различиях между библиотеками Android и Blackberry?), Полностью теряется из-за искажения вашего понимание через призму аккомодации.

1
ответ дан 4 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

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