У меня возникли некоторые проблемы с моей программы в VS .NET 2003.Использование Pthreads в VS .NET 2003
я изначально написал модуль, который использует библиотеку PTHREAD создать несколько потоков для обработки что-то. Это выполняется правильно в VS.NET 2003. Затем этот модуль был использован кем-то другим и интегрирован в другую более крупную программу. Я не уверен в деталях, но программа создает графический интерфейс, который позволяет пользователю выбрать вариант для запуска моего модуля.
Когда поток создан, в качестве идентификатора потока передается значение. Проблема с моим модулем в GUI заключается в том, что значение идентификатора потока равно 0 для всех потоков, в то время как идентификатор потока является правильным в модуле без GUI.
Вот как поток создается в модуле:
int64_t *tid[1000];
int64_t i = 0, rc;
for (i = 0 ; i < NUM_THREADS ; i++)
{
tid[i] = (int64_t *) malloc(sizeof(int64_t));
*tid[i] = i;
rc = pthread_create(&pthread, &attr, function, (void *)tid[i]);
Sleep(1);
if(rc)
{
free(tid[i]);
exit(1);
}
free(tid[i]);
}
Я проверил свойства проекта обоих, и только различия между 2 проектов перечислены ниже:
GUI - use managed extensions | my module (w/o GUI) - does not use managed extensions
In C/C++ preprocessor:
GUI - WIN32;_DEBUG;_CONSOLE;WINDOWS | my module (w/o GUI) - none
In C/C++ Additional Options:
GUI - /CLR | my module (w/o GUI) - no /CLR (error with /CLR: fatal error LNK1000: Internal error during BuildImage)
Кодекса это то же самое, поэтому я не понимаю, почему вывод неправильный для графического интерфейса, если использование управляемых расширений/clr каким-то образом не имеет значения? (Я не совсем уверен, что те либо.)
Edited добавить часть кода, который выводит идентификатор потока:
void *function(void *input)
{
int64_t threadid = *(int64_t *)input;
printf("threadid = %ld\n", threadid);
...
}
Пожалуйста посоветуйте.
спасибо.
С уважением, Rayne
Является ли библиотека pthreads портом от Unix до Win32? – Achilles
Да, но как это проблема, если модуль работает без GUI? – Rayne
Можете ли вы показать часть своей функции потока, которая читает аргумент tid? –