先定义了一个全局数组,int array[10];我在中断函数中
{
int *p = new int [10];
//这里我现在是随便赋值
for(...)
{
*(p+i) = i;
}
PostThreadMessage(*p,10);//把p送给消息处理
//是这里释放p呢?
delete [] p;
p = NULL;
}//对应消息处理函数,简单化了
message(w,l);
{
int *k = (int *)W;
for(...)
{
array[i] = *(k+i);
}
delarray();//数据处理函数
//还是这里处理
//delete [] k;
//k = NULL;
}直接在输入框内打的,如果排版或者逻辑错误别在意,意思到了就行了,请大家帮忙看看
{
int *p = new int [10];
//这里我现在是随便赋值
for(...)
{
*(p+i) = i;
}
PostThreadMessage(*p,10);//把p送给消息处理
//是这里释放p呢?
delete [] p;
p = NULL;
}//对应消息处理函数,简单化了
message(w,l);
{
int *k = (int *)W;
for(...)
{
array[i] = *(k+i);
}
delarray();//数据处理函数
//还是这里处理
//delete [] k;
//k = NULL;
}直接在输入框内打的,如果排版或者逻辑错误别在意,意思到了就行了,请大家帮忙看看
要传地址PostThreadMessage((WPARAM)p,10);在处理数据完成的地方删除
delarray();//数据处理函数
delete [] k;
1.new了之后没有看见成对的delete,代码给别人的使用,很容易被误解。
2.delete的很无厘头,也不是很安全。最好不要用这样的方式传递
宁愿写一个全局的类
构造里new ,析构里delete
看你的代码你也不介意全局数据~
{
int *p = new int [10];
//这里我现在是随便赋值
for(i=0;i<10;i++)
{
*(p+i) = Rec[i];
}
PostThreadMessage((WPARAM)p,10);//把p送给消息处理
int *t = new int [10];
//这里我现在是随便赋值
for(i=0;i<10;i++)
{
*(t+i) = Rec[i+10];
}
PostThreadMessage((WPARAM)t,10);//把t送给消息处理
}
后面处理一样,用同一个消息处理,会有问题吗?
new一块内存
等同于坐公共汽车抢位置你朋友没上来
但你要为他占位置
那么你就要告诉别人说:这里已经有人了如果你delete了,就等于说:这里没有人
如果这时候别人坐了,就等于内容不是你想的内容了.所以你应该是在你朋友不需要了后(比如下车)才宣布
否则查票员说:62号座位的同志请买票,你买还是不买?
引用都会出错,唉是的,在一个线程中,这样执行就等同于FIFO,不出现数据同步问题。
两个中断,接收的数据格式一样,就是内容拆包方式一样。
中断1 Rec[20];中断2 Rec1[20];
Interrupt1()
{
int *p = new int [10];
//这里我现在是随便赋值
for(i=0;i<10;i++)
{
*(p+i) = Rec[i];
}
PostThreadMessage((WPARAM)p,10);//把p送给消息处理
//这里应该还是消息发送成功与否判断,是吧
int *t = new int [10];
//这里我现在是随便赋值
for(i=0;i<10;i++)
{
*(t+i) = Rec[i+10];
}
PostThreadMessage((WPARAM)t,10);//把t送给消息处理
}
Interrupt1()
{
int *p = new int [10];
//这里我现在是随便赋值
for(i=0;i<10;i++)
{
*(p+i) = Rec1[i];
}
PostThreadMessage((WPARAM)p,10);//把p送给消息处理
int *t = new int [10];
//这里我现在是随便赋值
for(i=0;i<10;i++)
{
*(t+i) = Rec1[i+10];
}
PostThreadMessage((WPARAM)t,10);//把t送给消息处理
}能发给同一消息处理吗?
还是说必须用两个消息函数分别处理,如果分别处理,消息处理里面调用的函数也要做两份吗?
这里两个中断由两个线程控制,有可能会同时触发。
用同步机制可行吗?互斥是用在中断里呢,还是用在消息里。
2. 即使发送成功也要等用完了才删除..具体怎么知道用完了.有很多方法.
3. 可以由接收线程来释放内存,但释放内存的函数指针可以通过PostThreadMessage发送给目的消息处理线程.
由目的消息线程同时获得 [内存]和[释放内存的方法].
因为申请内存的方法多种多样,释放内存的方法也多种多样.这个需要配对.
我的想法是,谁申请的内存,它必须同时给出一个函数来释放内存.
谁来释放,都没问题.但需要解决同步..假如由接收线程来释放,那不需要考虑同步.但需要告诉接收线程如何释放内存.
就是传递上面提到的一个释放内存函数.
{
int* data;
int cout;
}
bool freearray(array* arr)
{
delete [] arr.data;
delete arr;
}
arraya* x = new array;
x.data = new int[10];
x.cout = 10;
PostThreadMessage((WPARAM)x,(LPARAM)freearray);类似这么个思想..楼主可以考虑一下.