соглашения, что Вы используете для Вас приложение, зависели бы от телефона
1), Какое приложение это. 2), Какую операционную систему Вы используете.
Это определенно верно. Я не уверен в быстрых DOS соглашениях, но в подобных Unix системах общие соглашения примерно:
1) Форматирование
appName параметры
2), Односимвольные параметры (такие как 'x') передаются как-x 3), параметры символа Multi (такие как 'добавлять-ключи) передаются как - добавлять-ключи
По-прежнему было бы безопаснее переместить логику соединения с БД в отдельный поток. С DB в потоке диалога вы сможете перерисовать индикатор выполнения, но не другие элементы управления в диалоговом окне.
Пробовали ли вы использовать SendMessage
с PBM_SETMARQUEE
вместо SetMarquee
. Я никогда не пробовал себя, но это должно сработать.
На мой взгляд, самый простой способ добиться того, что вы хотите сделать, - это установить соединение ProgressBar и DB в потоке пользовательского интерфейса и использовать OnTimer для вызова StepIt
] в индикаторе выполнения.
Вы также можете создать индикатор выполнения в потоке пользовательского интерфейса и использовать настраиваемое сообщение для рабочего потока, чтобы изменить состояние выполнения.
В любом случае, я согласен с AlexEzh в том, что лучший способ сделать это - заставить работать все, кроме пользовательского интерфейса. в рабочем потоке.
Надеюсь, эта статья о создании заставки для собственного потока с индикатором выполнения может быть полезной. Я написал его, решая проблему с блокировкой потоков на уровне очереди сообщений MFC.
AfxBeginThread
. CProgressCtrl
и вызовите Create
, передайте диалоговое окно как родительский для CProgressCtrl, используйте стиль выделения для управления прогрессом. В потоке создать цикл ожидания сообщения:
MSG msg;
while (GetMessage (& Msg, NULL, 0, 0))
{
TranslateMessage (& msg);
DispatchMessage (& msg);
}
Циклу сообщений необходимо проверить глобальный флаг, чтобы узнать, следует ли выйти из цикла.