![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Пользователь
Регистрация: 20.12.2008
Сообщений: 22
|
![]()
О задаче в общем. Нужно считывать данные от OPC сервера с заданной периодичностью и записывать их в БД. До БД еще далеко так как не могу организовать поток чтения данных.
Есть MFC диалог EERIESTREAMDlg в классе которого объявлена friend-функция потока. Там же объявлен объект myOPCEasy – через него буду вязаться с OPC Сервером (не думаю что сейчас важна подробная суть myOPCEasy). Код:
Есть реализация функции потока - суть ее не важна абсолютно. Пока важно только то, что я пытаюсь вызвать ЛЮБУЮ функцию объекта myOPCEasy – в данном случае подключение к OPC серверу. Код:
Так вот: Если просто вызвать threadFunc(this), то OPCConnectCreate отработает корректно – но это уже не поток. Если вызывать threadFunc как поток AfxBeginThread(threadFunc,this) – OPCConnectCreate не отработает корректно. 1. Расскажите в чем разница между вызовами threadFunc(this) и AfxBeginThread(threadFunc, this) с точки зрения передачи параметра LPVOID – я же и в 1-м и во 2-м случае передаю указатель this. 2. Может все-таки дело в myOPCEasy, в нем я использовал COM интерфейсы – что для меня очень сложно. Отладчиком дохожу до следующей строки HRESULT r2 = CoGetClassObject(clsid, CLSCTX_LOCAL_SERVER, NULL, IID_IClassFactory, (void**)&pCF). pCF объект интерфейса IClassFactory. в 1-м случае pCF назначается осмысленный адрес (типа 0x0012а57с) во 2-м случае 0x000000с. P.S. Не судите за возможный бред в вопросе – я не IT-шник. Последний раз редактировалось MaTBeu; 13.07.2009 в 11:23. |
![]() |
![]() |
![]() |
#2 |
Заблокирован
Регистрация: 18.11.2007
Сообщений: 254
|
![]()
я тебе скажу. в первом случае ты просто вызываешь функцию, во вотором создаешь поток. у тебя вопрос, почему работает некорректно, отвечаю, потому что функция которая создавала поток и передавала параметры потоку закончилася быстрее чем создался поток, тоесть передаваемые данные существовавшие только в функции которая создавала поток - разрушаються(очищаються , хз) до того как создаеться поток. 0x000000с означаеть NULL тоесть нету его, как раз тошо я тебе и говорил. поставь задержку сразу после создания потока
Код:
З.Ы. Про потоки ищи в инете Последний раз редактировалось lennon; 12.07.2009 в 16:49. |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 20.12.2008
Сообщений: 22
|
![]()
К сожалению не поучилось используя Sleep(...).
На другом форуме я тоже поднял эту тему. Судите сами: http://www.cyberforum.ru/visual-cpp/...tml#post213139 |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ПОТОК | Neymexa | Общие вопросы .NET | 5 | 12.05.2009 01:03 |
поток и progressbar | TaTT DoGG | Общие вопросы .NET | 24 | 06.05.2009 17:59 |
Поток | Черничный | Общие вопросы Delphi | 5 | 27.09.2008 21:23 |
Поток в никуда... | prizrak1390 | Работа с сетью в Delphi | 1 | 30.06.2008 10:32 |
Убить поток | Баламут | Общие вопросы Delphi | 3 | 22.03.2008 05:04 |