c++多线程和python多线程相互调用(c++线程一直给python推数据)
2022/6/25 1:22:36
本文主要是介绍c++多线程和python多线程相互调用(c++线程一直给python推数据),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
先看c++代码,很多代码不懂,能百度到的
#define EXPORT __declspec(dllexport) #include <iostream> #include <pthread.h> #include<Python.h> #include <windows.h> using namespace std; pthread_t tids[1]; PyObject* pModule = NULL;//声明变量 void* say_hello(void* args) { PyObject* pFunc = NULL;// 声明变量 pFunc = PyObject_GetAttrString(pModule, "add"); while (true) { int a = rand() % 100; PyGILState_STATE state = PyGILState_Ensure(); PyObject* args = Py_BuildValue("(i)", a);//给python函数参数赋值 PyObject* pRet = PyObject_CallObject(pFunc, args); PyGILState_Release(state); Sleep(500); } Py_Finalize(); } class TestLib { public: void display(); void init_(); }; void TestLib::display() { pthread_create(&tids[0], NULL, say_hello, NULL); } void TestLib::init_() { Py_SetPythonHome(L"C:/Users/ccy/Anaconda3"); Py_Initialize(); PyEval_InitThreads(); PyGILState_STATE state = PyGILState_Ensure(); PyRun_SimpleString("import sys"); PyRun_SimpleString("sys.path.append('./')"); pModule = PyImport_ImportModule("cpy"); PyGILState_Release(state); } extern "C" { TestLib obj; EXPORT void display() { obj.display(); } EXPORT void init_() { obj.init_(); } }
首先 pthread.h的安装可以参考这个网址
https://blog.csdn.net/ZPeng_CSDN/article/details/114108421
TestLib::init_() 里面的内容不能放在线程里面 去 init,否则程序运行不起来,要先init,再运行线程
线程里面运行的python代码,必须用
PyGILState_STATE state = PyGILState_Ensure(); 这些,否则python的机制不允许,会自动停下来 至于
python的代码:
import ctypes import time from threading import Thread lib=ctypes.CDLL(r"./cpyth1.dll") lib.init_() lib.display() class baseEntity(): a=0 def __init__(self) -> None: pass def set_a(self,a): self.a=a def get_a(self): return self.a bentity=baseEntity() def add(a): bentity.set_a(int(a)) while 1: print(bentity.get_a()) time.sleep(1)
好了,结束了,其中的安装,需要自己百度。
这篇关于c++多线程和python多线程相互调用(c++线程一直给python推数据)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南
- 2024-11-06Python编程基础入门指南
- 2024-11-06怎么使用python 计算两个GPS的距离功能-icode9专业技术文章分享