提交 eec6dacb 编写于 作者: X xwhqsj

update

上级 ae823bf9
...@@ -17,8 +17,8 @@ add_executable(main jni.h jni_md.h tpool.cpp tpool.h ...@@ -17,8 +17,8 @@ add_executable(main jni.h jni_md.h tpool.cpp tpool.h
# main.cpp # main.cpp
# multithread.cpp # multithread.cpp
threadpool.cpp threadpool.cpp
client.cpp # server.cpp
server.cpp) )
target_link_libraries(main /usr/local/java/jre/lib/amd64/server/libjvm.so /usr/lib/x86_64-linux-gnu/libpthread.so) target_link_libraries(main /usr/local/java/jre/lib/amd64/server/libjvm.so /usr/lib/x86_64-linux-gnu/libpthread.so)
...@@ -51,4 +51,7 @@ int main() ...@@ -51,4 +51,7 @@ int main()
read(sock, buffer, 1024); read(sock, buffer, 1024);
printf("%s\n", buffer); printf("%s\n", buffer);
close(sock);
} }
...@@ -71,7 +71,7 @@ CMAKE_BINARY_DIR = /home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug ...@@ -71,7 +71,7 @@ CMAKE_BINARY_DIR = /home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug
CMakeFiles/main.dir/all: CMakeFiles/main.dir/all:
$(MAKE) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/depend $(MAKE) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/depend
$(MAKE) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/build $(MAKE) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/build
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles --progress-num=1,2,3,4,5 "Built target main" @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles --progress-num=1,2,3 "Built target main"
.PHONY : CMakeFiles/main.dir/all .PHONY : CMakeFiles/main.dir/all
# Include target in all. # Include target in all.
...@@ -81,7 +81,7 @@ all: CMakeFiles/main.dir/all ...@@ -81,7 +81,7 @@ all: CMakeFiles/main.dir/all
# Build rule for subdir invocation for target. # Build rule for subdir invocation for target.
CMakeFiles/main.dir/rule: cmake_check_build_system CMakeFiles/main.dir/rule: cmake_check_build_system
$(CMAKE_COMMAND) -E cmake_progress_start /home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles 5 $(CMAKE_COMMAND) -E cmake_progress_start /home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles 3
$(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/main.dir/all $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/main.dir/all
$(CMAKE_COMMAND) -E cmake_progress_start /home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles 0 $(CMAKE_COMMAND) -E cmake_progress_start /home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles 0
.PHONY : CMakeFiles/main.dir/rule .PHONY : CMakeFiles/main.dir/rule
......
...@@ -6,17 +6,39 @@ ...@@ -6,17 +6,39 @@
#IncludeRegexTransform: #IncludeRegexTransform:
/home/wanhui/CallJvm/callJvmThreadpool/client.cpp /home/wanhui/CallJvm/callJvmThreadpool/threadpool.cpp
stdio.h cstdio
-
sys/socket.h
- -
arpa/inet.h cstdlib
- -
unistd.h unistd.h
- -
string.h sys/socket.h
-
netinet/in.h
-
cstring
- -
iostream iostream
- -
vector
-
jni.h
-
tpool.h
/home/wanhui/CallJvm/callJvmThreadpool/tpool.h
/home/wanhui/CallJvm/callJvmThreadpool/tpool.h
pthread.h
-
/usr/local/java/include/jni.h
stdio.h
-
stdarg.h
-
jni_md.h
/usr/local/java/include/jni_md.h
/usr/local/java/include/linux/jni_md.h
...@@ -4,8 +4,6 @@ set(CMAKE_DEPENDS_LANGUAGES ...@@ -4,8 +4,6 @@ set(CMAKE_DEPENDS_LANGUAGES
) )
# The set of files for implicit dependencies of each language: # The set of files for implicit dependencies of each language:
set(CMAKE_DEPENDS_CHECK_CXX set(CMAKE_DEPENDS_CHECK_CXX
"/home/wanhui/CallJvm/callJvmThreadpool/client.cpp" "/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles/main.dir/client.cpp.o"
"/home/wanhui/CallJvm/callJvmThreadpool/server.cpp" "/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles/main.dir/server.cpp.o"
"/home/wanhui/CallJvm/callJvmThreadpool/threadpool.cpp" "/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles/main.dir/threadpool.cpp.o" "/home/wanhui/CallJvm/callJvmThreadpool/threadpool.cpp" "/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles/main.dir/threadpool.cpp.o"
"/home/wanhui/CallJvm/callJvmThreadpool/tpool.cpp" "/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles/main.dir/tpool.cpp.o" "/home/wanhui/CallJvm/callJvmThreadpool/tpool.cpp" "/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles/main.dir/tpool.cpp.o"
) )
......
...@@ -83,51 +83,21 @@ CMakeFiles/main.dir/threadpool.cpp.s: cmake_force ...@@ -83,51 +83,21 @@ CMakeFiles/main.dir/threadpool.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/main.dir/threadpool.cpp.s" @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/main.dir/threadpool.cpp.s"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/wanhui/CallJvm/callJvmThreadpool/threadpool.cpp -o CMakeFiles/main.dir/threadpool.cpp.s /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/wanhui/CallJvm/callJvmThreadpool/threadpool.cpp -o CMakeFiles/main.dir/threadpool.cpp.s
CMakeFiles/main.dir/client.cpp.o: CMakeFiles/main.dir/flags.make
CMakeFiles/main.dir/client.cpp.o: ../client.cpp
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object CMakeFiles/main.dir/client.cpp.o"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/main.dir/client.cpp.o -c /home/wanhui/CallJvm/callJvmThreadpool/client.cpp
CMakeFiles/main.dir/client.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/main.dir/client.cpp.i"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/wanhui/CallJvm/callJvmThreadpool/client.cpp > CMakeFiles/main.dir/client.cpp.i
CMakeFiles/main.dir/client.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/main.dir/client.cpp.s"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/wanhui/CallJvm/callJvmThreadpool/client.cpp -o CMakeFiles/main.dir/client.cpp.s
CMakeFiles/main.dir/server.cpp.o: CMakeFiles/main.dir/flags.make
CMakeFiles/main.dir/server.cpp.o: ../server.cpp
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object CMakeFiles/main.dir/server.cpp.o"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/main.dir/server.cpp.o -c /home/wanhui/CallJvm/callJvmThreadpool/server.cpp
CMakeFiles/main.dir/server.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/main.dir/server.cpp.i"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/wanhui/CallJvm/callJvmThreadpool/server.cpp > CMakeFiles/main.dir/server.cpp.i
CMakeFiles/main.dir/server.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/main.dir/server.cpp.s"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/wanhui/CallJvm/callJvmThreadpool/server.cpp -o CMakeFiles/main.dir/server.cpp.s
# Object files for target main # Object files for target main
main_OBJECTS = \ main_OBJECTS = \
"CMakeFiles/main.dir/tpool.cpp.o" \ "CMakeFiles/main.dir/tpool.cpp.o" \
"CMakeFiles/main.dir/threadpool.cpp.o" \ "CMakeFiles/main.dir/threadpool.cpp.o"
"CMakeFiles/main.dir/client.cpp.o" \
"CMakeFiles/main.dir/server.cpp.o"
# External object files for target main # External object files for target main
main_EXTERNAL_OBJECTS = main_EXTERNAL_OBJECTS =
main: CMakeFiles/main.dir/tpool.cpp.o main: CMakeFiles/main.dir/tpool.cpp.o
main: CMakeFiles/main.dir/threadpool.cpp.o main: CMakeFiles/main.dir/threadpool.cpp.o
main: CMakeFiles/main.dir/client.cpp.o
main: CMakeFiles/main.dir/server.cpp.o
main: CMakeFiles/main.dir/build.make main: CMakeFiles/main.dir/build.make
main: /usr/local/java/jre/lib/amd64/server/libjvm.so main: /usr/local/java/jre/lib/amd64/server/libjvm.so
main: /usr/lib/x86_64-linux-gnu/libpthread.so main: /usr/lib/x86_64-linux-gnu/libpthread.so
main: CMakeFiles/main.dir/link.txt main: CMakeFiles/main.dir/link.txt
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Linking CXX executable main" @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Linking CXX executable main"
$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/main.dir/link.txt --verbose=$(VERBOSE) $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/main.dir/link.txt --verbose=$(VERBOSE)
# Rule to build all files generated by this target. # Rule to build all files generated by this target.
......
file(REMOVE_RECURSE file(REMOVE_RECURSE
"CMakeFiles/main.dir/tpool.cpp.o" "CMakeFiles/main.dir/tpool.cpp.o"
"CMakeFiles/main.dir/threadpool.cpp.o" "CMakeFiles/main.dir/threadpool.cpp.o"
"CMakeFiles/main.dir/client.cpp.o"
"CMakeFiles/main.dir/server.cpp.o"
"main.pdb" "main.pdb"
"main" "main"
) )
......
# CMAKE generated file: DO NOT EDIT! # CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.14 # Generated by "Unix Makefiles" Generator, CMake Version 3.14
CMakeFiles/main.dir/client.cpp.o CMakeFiles/main.dir/threadpool.cpp.o
/home/wanhui/CallJvm/callJvmThreadpool/client.cpp /home/wanhui/CallJvm/callJvmThreadpool/threadpool.cpp
/home/wanhui/CallJvm/callJvmThreadpool/tpool.h
/usr/local/java/include/jni.h
/usr/local/java/include/linux/jni_md.h
CMakeFiles/main.dir/tpool.cpp.o CMakeFiles/main.dir/tpool.cpp.o
/home/wanhui/CallJvm/callJvmThreadpool/tpool.cpp /home/wanhui/CallJvm/callJvmThreadpool/tpool.cpp
/home/wanhui/CallJvm/callJvmThreadpool/tpool.h /home/wanhui/CallJvm/callJvmThreadpool/tpool.h
# CMAKE generated file: DO NOT EDIT! # CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.14 # Generated by "Unix Makefiles" Generator, CMake Version 3.14
CMakeFiles/main.dir/client.cpp.o: ../client.cpp CMakeFiles/main.dir/threadpool.cpp.o: ../threadpool.cpp
CMakeFiles/main.dir/threadpool.cpp.o: ../tpool.h
CMakeFiles/main.dir/threadpool.cpp.o: /usr/local/java/include/jni.h
CMakeFiles/main.dir/threadpool.cpp.o: /usr/local/java/include/linux/jni_md.h
CMakeFiles/main.dir/tpool.cpp.o: ../tpool.cpp CMakeFiles/main.dir/tpool.cpp.o: ../tpool.cpp
CMakeFiles/main.dir/tpool.cpp.o: ../tpool.h CMakeFiles/main.dir/tpool.cpp.o: ../tpool.h
......
/usr/bin/c++ -g CMakeFiles/main.dir/tpool.cpp.o CMakeFiles/main.dir/threadpool.cpp.o CMakeFiles/main.dir/client.cpp.o CMakeFiles/main.dir/server.cpp.o -o main -Wl,-rpath,/usr/local/java/jre/lib/amd64/server /usr/local/java/jre/lib/amd64/server/libjvm.so -lpthread /usr/bin/c++ -g CMakeFiles/main.dir/tpool.cpp.o CMakeFiles/main.dir/threadpool.cpp.o -o main -Wl,-rpath,/usr/local/java/jre/lib/amd64/server /usr/local/java/jre/lib/amd64/server/libjvm.so -lpthread
CMAKE_PROGRESS_1 = 1 CMAKE_PROGRESS_1 = 1
CMAKE_PROGRESS_2 = 2 CMAKE_PROGRESS_2 = 2
CMAKE_PROGRESS_3 = 3 CMAKE_PROGRESS_3 = 3
CMAKE_PROGRESS_4 = 4
CMAKE_PROGRESS_5 = 5
...@@ -123,60 +123,6 @@ main/fast: ...@@ -123,60 +123,6 @@ main/fast:
$(MAKE) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/build $(MAKE) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/build
.PHONY : main/fast .PHONY : main/fast
client.o: client.cpp.o
.PHONY : client.o
# target to build an object file
client.cpp.o:
$(MAKE) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/client.cpp.o
.PHONY : client.cpp.o
client.i: client.cpp.i
.PHONY : client.i
# target to preprocess a source file
client.cpp.i:
$(MAKE) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/client.cpp.i
.PHONY : client.cpp.i
client.s: client.cpp.s
.PHONY : client.s
# target to generate assembly for a file
client.cpp.s:
$(MAKE) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/client.cpp.s
.PHONY : client.cpp.s
server.o: server.cpp.o
.PHONY : server.o
# target to build an object file
server.cpp.o:
$(MAKE) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/server.cpp.o
.PHONY : server.cpp.o
server.i: server.cpp.i
.PHONY : server.i
# target to preprocess a source file
server.cpp.i:
$(MAKE) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/server.cpp.i
.PHONY : server.cpp.i
server.s: server.cpp.s
.PHONY : server.s
# target to generate assembly for a file
server.cpp.s:
$(MAKE) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/server.cpp.s
.PHONY : server.cpp.s
threadpool.o: threadpool.cpp.o threadpool.o: threadpool.cpp.o
.PHONY : threadpool.o .PHONY : threadpool.o
...@@ -240,12 +186,6 @@ help: ...@@ -240,12 +186,6 @@ help:
@echo "... rebuild_cache" @echo "... rebuild_cache"
@echo "... main" @echo "... main"
@echo "... edit_cache" @echo "... edit_cache"
@echo "... client.o"
@echo "... client.i"
@echo "... client.s"
@echo "... server.o"
@echo "... server.i"
@echo "... server.s"
@echo "... threadpool.o" @echo "... threadpool.o"
@echo "... threadpool.i" @echo "... threadpool.i"
@echo "... threadpool.s" @echo "... threadpool.s"
......
...@@ -96,18 +96,12 @@ ...@@ -96,18 +96,12 @@
</MakeCommands> </MakeCommands>
</Target> </Target>
</Build> </Build>
<Unit filename="/home/wanhui/CallJvm/callJvmThreadpool/client.cpp">
<Option target="main"/>
</Unit>
<Unit filename="/home/wanhui/CallJvm/callJvmThreadpool/jni.h"> <Unit filename="/home/wanhui/CallJvm/callJvmThreadpool/jni.h">
<Option target="main"/> <Option target="main"/>
</Unit> </Unit>
<Unit filename="/home/wanhui/CallJvm/callJvmThreadpool/jni_md.h"> <Unit filename="/home/wanhui/CallJvm/callJvmThreadpool/jni_md.h">
<Option target="main"/> <Option target="main"/>
</Unit> </Unit>
<Unit filename="/home/wanhui/CallJvm/callJvmThreadpool/server.cpp">
<Option target="main"/>
</Unit>
<Unit filename="/home/wanhui/CallJvm/callJvmThreadpool/threadpool.cpp"> <Unit filename="/home/wanhui/CallJvm/callJvmThreadpool/threadpool.cpp">
<Option target="main"/> <Option target="main"/>
</Unit> </Unit>
......
此差异已折叠。
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x0000564b4bda0be4, pid=12890, tid=0x00007fcbf2b2c700
#
# JRE version: Java(TM) SE Runtime Environment (8.0_221-b11) (build 1.8.0_221-b11)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.221-b11 interpreted mode linux-amd64 compressed oops)
# Problematic frame:
# C [main+0x1be4] invoke_class(JNIEnv_*, char*, char*)+0x24
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
#
--------------- T H R E A D ---------------
Current thread is native thread
siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000000
Registers:
RAX=0x0000000000000004, RBX=0x0000000000000000, RCX=0x0000000000000000, RDX=0x00007fcc0d20b8c0
RSP=0x00007fcbf2b2ba30, RBP=0x0000000000000005, RSI=0x0000000000000004, RDI=0x00007fcbf2b2b4c0
R8 =0x00007fcbf2b2c700, R9 =0x0000000000000000, R10=0x0000564b4bda12dd, R11=0x0000000000000000
R12=0x00007fcbf2b2bac3, R13=0x00007fcbf2b2bab0, R14=0x0000000000000000, R15=0x00007fffac9e74f0
RIP=0x0000564b4bda0be4, EFLAGS=0x0000000000010202, CSGSFS=0x002b000000000033, ERR=0x0000000000000004
TRAPNO=0x000000000000000e
Top of Stack: (sp=0x00007fcbf2b2ba30)
0x00007fcbf2b2ba30: 00007fcbf2b2bab0 0000000000000005
0x00007fcbf2b2ba40: 00007fcbf2b2bac3 00007fcbf2b2ba70
0x00007fcbf2b2ba50: 0000000000000000 0000564b4bda0dec
0x00007fcbf2b2ba60: 0000000000000000 0000000000000000
0x00007fcbf2b2ba70: 00007fcbc8000b40 00007fcbc8000b50
0x00007fcbf2b2ba80: 00007fcbc8000b50 0024000000000000
0x00007fcbf2b2ba90: 7266206f6c6c6548 6576726573206d6f
0x00007fcbf2b2baa0: 0000000000000072 0000000000000000
0x00007fcbf2b2bab0: 2a207463656c6573 6574206d6f726620
0x00007fcbf2b2bac0: 6564757473007473 000000000000746e
0x00007fcbf2b2bad0: 0000000000000000 0000000000000000
0x00007fcbf2b2bae0: 0000000000000000 0000000000000000
0x00007fcbf2b2baf0: 0000000000000000 0000000000000000
0x00007fcbf2b2bb00: 0000000000000000 0000000000000000
0x00007fcbf2b2bb10: 0000000000000000 0000000000000000
0x00007fcbf2b2bb20: 0000000000000000 0000000000000000
0x00007fcbf2b2bb30: 0000000000000000 0000000000000000
0x00007fcbf2b2bb40: 0000000000000000 0000000000000000
0x00007fcbf2b2bb50: 0000000000000000
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
...@@ -2,11 +2,17 @@ ...@@ -2,11 +2,17 @@
// Created by wanhui on 10/12/19. // Created by wanhui on 10/12/19.
// //
#include <cstdio> #include <cstdlib>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <cstring>
#include <iostream>
#include <vector>
#include <jni.h> #include <jni.h>
#include <pthread.h>
#define PORT 8080
#define NUM_THREADS 6 #define NUM_THREADS 6
pthread_mutex_t mutexjvm; pthread_mutex_t mutexjvm;
...@@ -18,41 +24,78 @@ struct JVM { ...@@ -18,41 +24,78 @@ struct JVM {
JavaVM *jvm; JavaVM *jvm;
}; };
void invoke_class(JNIEnv* env); struct ARGS {
struct JVM* jvm;
int socket;
};
void *jvmThreads(void *args, char *plainsql, char *dbname);
void invoke_class(JNIEnv *env, char *plainsql, char *dbname);
int socket_init();
JNIEnv *create_vm(struct JVM *jvm);
void* jvmThreads(void *myJvm) void* handle_stream(void* arg);
void* handle_stream(void* args)
{ {
auto* myJvmptr = (struct JVM*) myJvm; printf("I am get in");
struct ARGS *arg = static_cast<ARGS *>(args);
struct JVM *myJvm = arg->jvm;
int client_fd = arg->socket;
char buf[1024] = {0};
char hello[] = "Hello from server";
read(client_fd, buf, 1024);
char* psql;
char* dbn;
char delims[] = "$";
char *res = nullptr;
std::vector<char*> resvec;
res = strtok(buf, delims);
while (res != nullptr)
{
resvec.push_back(res);
res = strtok(nullptr, delims);
}
psql = resvec[0];
dbn = resvec[1];
jvmThreads(&myJvm, psql, dbn);
send(client_fd, hello, strlen(hello), 0);
printf("Hello message send");
}
void *jvmThreads(void *myJvm, char *plainsql, char *dbname) {
auto *myJvmptr = (struct JVM *) myJvm;
JavaVM *jvmPtr = myJvmptr->jvm; JavaVM *jvmPtr = myJvmptr->jvm;
JNIEnv* env = nullptr; JNIEnv *env = nullptr;
// Each thread will do following:
// 1. lock the mutex,
// 2. give some info to the user,
// 3. attach to JVM,
// 4. do JVM based stuff,
// 5. detach from JVM,
// 6. release mutex,
// 7. finish thread's job.
// Done
pthread_mutex_lock(&mutexjvm); pthread_mutex_lock(&mutexjvm);
printf("I will call JVM\n"); printf("I will call JVM\n");
jvmPtr->AttachCurrentThread((void**)&(env), nullptr); jvmPtr->AttachCurrentThread((void **) &(env), nullptr);
invoke_class(env); invoke_class(env, plainsql, dbname);
jvmPtr->DetachCurrentThread(); jvmPtr->DetachCurrentThread();
pthread_mutex_unlock(&mutexjvm); pthread_mutex_unlock(&mutexjvm);
pthread_exit(nullptr); pthread_exit(nullptr);
} }
JNIEnv *create_vm (struct JVM *jvm) { JNIEnv *create_vm(struct JVM *jvm) {
JNIEnv *env; JNIEnv *env;
JavaVMInitArgs vm_args; JavaVMInitArgs vm_args;
JavaVMOption options[3]; JavaVMOption options[3];
options[0].optionString = "-Djava.compiler=NONE"; options[0].optionString = "-Djava.compiler=NONE";
options[1].optionString = "-Djava.class.path=.:/home/wanhui/Documents/callJvmThreadpool/qin_test.jar"; options[1].optionString = "-Djava.class.path=.:/home/wanhui/CallJvm/callJvmThreadpool/qin_test1.jar";
options[2].optionString = "-verbose:jni"; options[2].optionString = "-verbose:jni";
vm_args.options = options; vm_args.options = options;
...@@ -61,42 +104,96 @@ JNIEnv *create_vm (struct JVM *jvm) { ...@@ -61,42 +104,96 @@ JNIEnv *create_vm (struct JVM *jvm) {
vm_args.ignoreUnrecognized = JNI_TRUE; vm_args.ignoreUnrecognized = JNI_TRUE;
vm_args.version = JNI_VERSION_1_8; vm_args.version = JNI_VERSION_1_8;
int status = JNI_CreateJavaVM (&jvm->jvm, (void **) &env, &vm_args); int status = JNI_CreateJavaVM(&jvm->jvm, (void **) &env, &vm_args);
if (status < 0 || !env) { if (status < 0 || !env) {
printf ("Error: %d\n", status); printf("Error: %d\n", status);
return nullptr; return nullptr;
} }
return env; return env;
} }
void invoke_class (JNIEnv * env) { void invoke_class(JNIEnv *env, char *plainsql, char *dbname) {
jclass Main_class; jclass Main_class;
jmethodID fun_id; jmethodID stu_id;
jmethodID hello_id;
jobject obj1;
Main_class = env->FindClass("com/testjvm/Helloworld");
Main_class = env->FindClass ("com/testjvm/Helloworld"); // test generally function student()
if(Main_class == nullptr) hello_id = env->GetMethodID(Main_class, "<init>", "()V");
return; obj1 = env->NewObject(Main_class, hello_id);
fun_id = env->GetStaticMethodID (Main_class, "main", "([Ljava/lang/String;)V"); jstring plainsqlstr = env->NewStringUTF(plainsql);
jstring dbnamestr = env->NewStringUTF(dbname);
env->CallStaticIntMethod (Main_class, fun_id); stu_id = env->GetMethodID(Main_class, "student", "([Ljava/lang/String;)V");
env->CallObjectMethod(obj1, stu_id, dbnamestr);
} }
int main () { int socket_init() {
int server_fd, new_socket;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
perror("setsockopt");
exit(EXIT_FAILURE);
}
address.sin_family = AF_INET;
address.sin_addr.s_addr = htonl(INADDR_ANY);
address.sin_port = htons(PORT);
if (bind(server_fd, (struct sockaddr *) &address, sizeof(address)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
if (listen(server_fd, 10) < 0) {
perror("listen failed");
exit(EXIT_FAILURE);
}
printf("listening...\n");
if ((new_socket = accept(server_fd, (struct sockaddr *) &address, (socklen_t *) &addrlen)) < 0) {
perror("accept failed");
exit(EXIT_FAILURE);
}
return new_socket;
}
int main() {
struct JVM myJvm{}; struct JVM myJvm{};
JNIEnv *myEnv = create_vm (&myJvm); JNIEnv *myEnv = create_vm(&myJvm);
if (myEnv == nullptr) if (myEnv == nullptr)
return 1; return 1;
int new_socket = socket_init();
struct ARGS *args;
args = static_cast<ARGS *>(malloc(sizeof(struct ARGS *)));
args->jvm = &myJvm;
args->socket = new_socket;
pthread_mutex_init(&mutexjvm, nullptr); pthread_mutex_init(&mutexjvm, nullptr);
for(unsigned long & thread : threads) for (unsigned long &thread : threads) {
{ printf("before call");
pthread_create(&thread, nullptr, jvmThreads, (void*)&myJvm); pthread_create(&thread, nullptr, handle_stream, (void *) &args);
pthread_join(thread, nullptr); pthread_join(thread, nullptr);
} }
myJvm.jvm->DestroyJavaVM (); myJvm.jvm->DestroyJavaVM();
return 0; return 0;
} }
\ No newline at end of file
此差异已折叠。
...@@ -118,7 +118,7 @@ void tpool_destroy() ...@@ -118,7 +118,7 @@ void tpool_destroy()
free(tpool); free(tpool);
} }
int tpool_add_work(void*(*routine)(void*), void* arg, void* arg1) int tpool_add_work(void*(*routine)(void*), void* arg)
{ {
tpool_work_t *work, *member; tpool_work_t *work, *member;
...@@ -137,7 +137,6 @@ int tpool_add_work(void*(*routine)(void*), void* arg, void* arg1) ...@@ -137,7 +137,6 @@ int tpool_add_work(void*(*routine)(void*), void* arg, void* arg1)
work->routine = routine; work->routine = routine;
work->arg = arg; work->arg = arg;
work->arg1 = arg1;
work->next = nullptr; work->next = nullptr;
pthread_mutex_lock(&tpool->queue_lock); pthread_mutex_lock(&tpool->queue_lock);
......
...@@ -30,7 +30,7 @@ int tpool_create(int max_thr_num); ...@@ -30,7 +30,7 @@ int tpool_create(int max_thr_num);
void tpool_destroy(); void tpool_destroy();
int tpool_add_work(void*(*routine)(void*), void* arg, void* arg1); int tpool_add_work(void*(*routine)(void*), void* arg);
#endif //CALLJVMTHREADPOOL_TPOOL_H #endif //CALLJVMTHREADPOOL_TPOOL_H
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册