Multithreading C+中的多线程+;使用引用类-ThreadStart构造函数问题?
我感谢您的帮助,并想提前向您表示感谢。我正在为我的一个班做一个项目。本质上是使用多线程和引用类执行合并排序。大体上,我只是尝试创建一个初始线程来开始递归合并排序。每次拆分数组时,都会生成一个新线程来处理该子例程。我不需要全部完成,我只是不明白为什么我的线程构造函数和ThreadStart委托不能工作。再次感谢Multithreading C+中的多线程+;使用引用类-ThreadStart构造函数问题?,multithreading,class,reference,c++-cli,mergesort,Multithreading,Class,Reference,C++ Cli,Mergesort,我感谢您的帮助,并想提前向您表示感谢。我正在为我的一个班做一个项目。本质上是使用多线程和引用类执行合并排序。大体上,我只是尝试创建一个初始线程来开始递归合并排序。每次拆分数组时,都会生成一个新线程来处理该子例程。我不需要全部完成,我只是不明白为什么我的线程构造函数和ThreadStart委托不能工作。再次感谢 #include <iostream> #include <vector> #include <string> #include <time.h&
#include <iostream>
#include <vector>
#include <string>
#include <time.h>
#include <cstdlib>
using namespace System;
using namespace System::Threading;
public ref class MergeSort
{
private: int cnt;
public: MergeSort()
{
cnt = 0;
}
public: void mergeSort(char a[], int from, int to)
{
Thread^ current = Thread::CurrentThread;
if(from == to)
return;
int mid = (from + to)/2;
//Sort the first and the second half
//addThread(a, from, mid);
//addThread(a, mid+1, to);
//threads[0]->Join();
//threads[1]->Join();
merge(a, from, mid, to);
}
public: void merge(char a[], int from, int mid, int to)
{
Thread^ current = Thread::CurrentThread;
while (current ->ThreadState == ThreadState::Running)
{
int n = to-from + 1; // Size of range to be merged
std::vector<char> b(n);
int i1 = from; //Next element to consider in the first half
int i2 = mid + 1; //Next element to consider in the second half
int j = 0; //Next open position in b
//As long as neight i1 or i2 is past the end, move the smaller element into b
while(i1 <= mid && i2 <= to)
{
if(a[i1] < a[i2])
{
b[j] = a[i1];
i1++;
}
else
{
b[j] = a[i2];
i2++;
}
j++;
}
//Copy any remaining entries of the first half
while(i1 <= mid)
{
b[j] = a[i1];
i1++;
j++;
}
while(i2 <= to)
{
b[j] = a[i2];
i2++;
j++;
}
//Copy back from temporary vector
for(j = 0; j < n; j++)
a[from+j] = b[j];
}
}
};
void main()
{
char A[10];
for(int i = 0; i < 10; i++)
{
A[i] = ((char) ((rand() % (122-65)) + 65));
}
array<Thread^>^ tr = gcnew array<Thread^>(10);
MergeSort^ ms1 = gcnew MergeSort();
ThreadStart^ TS = gcnew ThreadStart(ms1, &MergeSort::mergeSort(A, 0, 10));
tr[0] = gcnew Thread(TS);
tr[0] -> Start();
system("pause");
}
#包括
#包括
#包括
#包括
#包括
使用名称空间系统;
使用名称空间系统::线程;
公共引用类合并排序
{
私人:int cnt ;;
public:MergeSort()
{
cnt=0;
}
public:void mergeSort(字符a[],int-from,int-to)
{
线程^current=线程::当前线程;
如果(从==到)
返回;
int mid=(从+到)/2;
//对上半部分和下半部分进行排序
//添加线程(a、起始、中间);
//添加线程(a,mid+1,至);
//线程[0]->Join();
//线程[1]->Join();
合并(a、从、中间、到);
}
public:void merge(字符a[],int-from,int-mid,int-to)
{
线程^current=线程::当前线程;
while(当前->线程状态==线程状态::正在运行)
{
int n=to from+1;//要合并的范围的大小
std::载体b(n);
从上半部分考虑In I1= On;//下一个元素
int I2= MID + 1;/NeXT元素在下半年考虑
int j=0;//b中的下一个打开位置
//只要没有i1或i2超过末端,就将较小的元素移动到b中
while(i1您在这里面临的问题是如何构造ThreadStart
委托。您试图在ThreadStart
构造函数中执行太多操作。此时您无法传入参数,因为它所寻找的只是线程的开始位置
代表应为:
ThreadStart^ TS = gcnew ThreadStart(ms1, &MergeSort::mergeSort);
由于您处于某种状态,我建议您对如何使用C++\CLI进行更多的研究。这应该给您一个开始。编辑:
没关系,问题是我必须更改我试图从Int32传递到Object^的方法的参数
我有一个类似的问题,虽然我认为我的问题不是参数。我在thread->Start()期间传递这些参数
我认为我的问题在于我试图使用ref类的方法启动线程
委托初始值设定项无效--函数与委托类型不匹配
这是我的错误。有什么想法吗
void AddForcesAll() {
for (int index = 0; index < n; index++) {
Thread^ thread = gcnew Thread (gcnew ParameterizedThreadStart(this, &Bodies::AddForces));
thread->Start(index);
}
void AddForcesAll(){
对于(int index=0;index开始(索引);
}
对于非引用类,语法对我来说很好。为什么要使用^
作为指针?你是在混淆pascal(或delphi)吗这是C++的微软味道吗?为什么不<代码> STD::线程< /代码>这不是C++。这是C++。C.