Я пытаюсь написать программу Teamcenter ITK (c based), которая будет работать как другой поток, вызванный из основного потока. Основной поток вызывается из действия в пользовательском интерфейсе. Поскольку дочерний поток занимает много времени, чтобы завершить, если я не создаю дочерний поток и помещаю код в основной поток, пользовательский интерфейс замерзает в течение 10 минут, что неприемлемо. Теперь как основной, так и дочерний потоки необходимо обмениваться аутентификацией, которая была выполнена основным потоком, поскольку я использую SSO. Им также необходимо подключиться к базе данных. Наконец, основной поток не должен ждать завершения дочернего потока, так как иначе вся цель иметь дочерний поток будет побеждена. Код для вызова дочернего потока являетсяМногопоточность в Teamcenter ITK
handle = (HANDLE) _beginthread (submitToPublishTibcoWf, 0, &input); // create thread
do
{
sprintf (message, "Waiting %d time for 1000 milliseconds since threadReady is %d\n", i++, threadReady);
log_msg (message);
WaitForSingleObject(handle, 1000);
}
while (!threadReady);
sprintf (message, "Wait for thread to be ready over after %d tries since threadReady is %d\n", i, threadReady);
log_msg (message);
log_msg ("Main thread about to exit now");
Я установил = 1 (глобальная переменная) threadReady всякий раз, когда я собираюсь выполнить фрагмент кода, в детской теме, которая занимает 8 минут, чтобы бежать.
Теперь проблема заключается в том, что дочерний поток ведет себя wierd после выхода основного потока. И я получаю эту ошибку:
Пт май 25 11:34:46 2012: Основная тема о выходе Это приложение попросило Runtime прекратить его необычным способом. Для получения дополнительной информации обратитесь в службу поддержки приложения.
Большая часть дочерней нити выполняется, но иногда она просто падает до самого конца.
Любая помощь очень ценится.
Также иногда я получаю эту ошибку во время отладки: Необработанное исключение в 0x580d8390 в tcserver.exe: 0xC0000005: Доступ к определению места нарушения доступа 0xffffffec. – Yogesh