C # — правильный способ для многопоточности в C ++ с использованием библиотеки Boost

У меня есть C ++ DLL, и я использовал форсированная библиотека для реализации многопоточности, а затем я хотел бы использовать эту DLL в программе на C #.
Я сделал это, и моя программа работает, как я ожидал, и в моей системе нет проблем.
Когда я создаю установщик с использованием Расширенный установщик и установить его как новую программу в моей системе (для которой я разработал приложение) все тоже хорошо и проблем нет. Но когда я установил эту программу в другие системы и запустил ее, сначала программа будет работать нормально, но когда она захочет создать потоки и запустить их, программа будет остановлена.
Часть моих кодов в C ++ dll выглядит следующим образом:

struct ThreadParams
{
int thetaStart,
thetaEnd,
rStart;
vector<string> files;
}thParams;
const int NUM_OF_THREADS = 5;
extern "C"{
__declspec(dllexport) int __stdcall Start(const char *path)
{
thParams.files = listFilesInDirectory(path);
int step = thParams.files.size()/NUM_OF_THREADS;
thParams.rStart = 1;
thParams.thetaStart = 0;
thParams.thetaEnd = 360;

boost::thread_group tgroup;
FILE *output_text;
char *buffer = new char[128];
for (int i = 0; i < NUM_OF_THREADS; i++)
{
sprintf(buffer,"out%d.txt",i+1);
output_text = fopen(buffer,"wt");

int start  = i*step;
int end  = (thParams.files.size() - (start+step)) >= step ? (start+step) : thParams.files.size();
tgroup.create_thread(boost::bind(ThreadProcess,start,end,output_text,i+1));
}
tgroup.join_all();
_fcloseall();
delete buffer;
buffer = NULL;
}
}
void ThreadProcess(int start, int end, FILE *out, int threadID)
{
for(int i = start; i < end; ++i)
{
fprintf(out,"%s\n",thParams.files[i].c_str());
}
}

Может ли кто-нибудь помочь мне решить эту проблему, пожалуйста?
Заранее спасибо.

1

Решение

Boost.thread — одна из немногих буст-библиотек, которые не только для заголовков, и им нужна скомпилированная библиотека для присутствия. Скорее всего, вы связали свой код с динамической версией boost.thread.

Ваши решения:

  1. Ссылка со статической версией boost.thread
  2. Включите динамическую библиотеку в ваш дистрибутив.
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector