如何用C实现线程间的数据通讯?

yjukh 2008-02-19 11:55:21
如果是普通对象,到可以正常读写。
但若在主线程中动态创建了一个数组,在子线程中却不能访问,有没有比较好的方法?
我是用CVI做的,C语言。
...全文
740 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Chappell 2008-02-21
  • 打赏
  • 举报
回复

#include "stdafx.h"
#include <windows.h>
#include <conio.h>

DWORD WINAPI ThreadFunc( LPVOID lpParam )
{
char szMsg[80];

wsprintf( szMsg, "Parameter = %d.", *(DWORD*)lpParam );
MessageBox( NULL, szMsg, "ThreadFunc", MB_OK );

return 0;
}

void main()
{
DWORD dwThreadId, dwThrdParam = 1;
HANDLE hThread;
char szMsg[80];

hThread = CreateThread(
NULL, // no security attributes
0, // use default stack size
ThreadFunc, // thread function
&dwThrdParam, // argument to thread function
0, // use default creation flags
&dwThreadId); // returns the thread identifier

// Check the return value for success.

if (hThread == NULL)
{
wsprintf( szMsg, "CreateThread failed." );
MessageBox( NULL, szMsg, "main", MB_OK );
}
else
{
_getch();
CloseHandle( hThread );
}
}
Jim_King_2000 2008-02-21
  • 打赏
  • 举报
回复
================================================================================
但若在主线程中动态创建了一个数组,在子线程中却不能访问
================================================================================
不会的。只要是一个进程内的东东,都是可以访问的。你可以在创建子线程的时候把这个指针传递给子线程,或者发消息给子线程也可以。
独孤过儿 2008-02-21
  • 打赏
  • 举报
回复
IPC问题...

楼主去google,关键字是“进程间通信 方式”...
xxmv99 2008-02-21
  • 打赏
  • 举报
回复
看来用3L的2,3可以实现
yjukh 2008-02-20
  • 打赏
  • 举报
回复
上面的方法好像不行,
我是想在 主线程中声明并动态创建一个空间
让子线程去更新该空间的数据
wisdosoft 2008-02-19
  • 打赏
  • 举报
回复
主线程动态创建的变量,在自己的堆栈空间,字线程很难访问,需使用全局数组。
另外就是使用WM_COPYDATA消息拷贝变量供子进程使用,但要密切注意线程间的同步。
erwin1984 2008-02-19
  • 打赏
  • 举报
回复
作为参数传入子线程或者做为全局变量吧。
missilery 2008-02-19
  • 打赏
  • 举报
回复
向线程发送消息
PostThreadMessage
lala_benben 2008-02-19
  • 打赏
  • 举报
回复
1。主线程把数据作为参数传递给子线程
2。开辟共享内存。。
3。使用全局变量

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧